Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
файлы лекция (основная).pdf
Скачиваний:
31
Добавлен:
15.04.2015
Размер:
938.85 Кб
Скачать

Вот что появится на консоли после запуска программы:

Text string

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Файл успешно создан

Содержимое файла, созданного нашей программой, показано на рис. 5.

Рисунок 5: Содержимое созданного двоичного файла

Обратите внимание, что в самом начале файла находится байт со значением ОхВ, вслед за которым идет текстовая строка в кодировке ASCII. Этот байт задает длину строки. Вслед за строкой идут 20 чисел, каждое из которых занимает 4 байта.

4.7 Работа с текстовыми файлами

Хотя рассмотренные в предыдущем разделе потоки FileStream, BinaryWriter и BinaryReader можно использовать для записи в файлы и чтения из файлов текстовых строк, лучше прменять специально предназначенные для этого средства. Речь идет о потоках классов StreamWriter и StreamReader, Эти потоки чрезвычайно просты в использовании и удобны для работы с текстовыми файлами.

Основные приемы использования потоков StreamWriter и StreamReader демонстрируются в программе, исходный текст которой приведен в листинге 3.

Листинг 3.

using System; using System.IO;

namespace TextFile

{

class TextFileApp

{

private const string testFile = "mydata.txt";

static void Main{string[] args)

{

if[File.Exists(testFile))

{

Console.WriteLine("Файл {0) уже существует", testFile); Console.ReadLine(); return;

}

StreamWriter sw = File.CreateText(testFile); sw.WriteLine("Каждый охотник желает знать, где сидит фазан!");

sw.WriteLine ("Число \"Пи\" равно примерно {0}.", 3.1415926); sw.Close();

StreamReader sr = File.OpenText(testFile); while(true)

{

String str = sr.ReadLine();

if(str == null) break; Console.WriteLine(str);

}

sr.Close();

}

}

Как и предыдущая программа (см. листинг 2), наша новая программа сразу после запуска проверяет существование рабочего файла в текущем каталоге:

private const string testFile = "mydata.txt";

if (File.Exists(testFile))

{

Console.WriteLine("Файл {0} уже существует", testFile); Console.ReadLine();

return;

}

Если файл с именем mydata.txt существует а текущем каталоге, программа завершает свою работу с сообщением об ошибке. В противном случае программа создает текстовый файл и открывает поток для работы с ним класса StreamWriter:

StreamWriter sw = File.CreateText(testFile);

Как видите, эта операция выполняется методом CreateText, определенным в классе File. Аналогичного эффекта можно было бы достичь и с помощью следующего конструктора класса StreamWriter:

StreamWriter sw = new StreamWriter(testFile, false);

Первый параметр этого конструктора определяет полный путь к открываемому файлу. Если значение второго параметра равно true, новые данные будут добавлены к файлу, а если false — содержимое файла будет перезаписано.

Для открытия текстового файла на запись вы можете использовать любой из этих конструкторов. Заметим, что в классе StreamWriter имеются и другие конструкторы, позволяющие, например, задать кодировку текстовых символов, записываемых в файл.

После того как поток StreamWriter открыт, программа может записывать в него текстовые строки, пользуясь хорошо известными вам методами Write и WriteLine:

sw.WriteLine("Каждый охотник желает знать, где сидит фазан!"); sw.WriteLine ("Число \"Пи\" равно примерно (0).", 3.1415926);

Когда запись новых данных в поток завершена, необходимо закрыть поток методом Close:

sw.Close();

Теперь о чтении данных из текстового файла.

Прежде всего программа должна открыть поток класса StreamReader, привязав его к файлу. Это можно сделать методом File . OpenText:

StreamReader sr = File.OpenText(testFile);