Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab16_file.doc
Скачиваний:
14
Добавлен:
29.02.2016
Размер:
106.5 Кб
Скачать

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

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

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

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();

Console.WriteLine("Файл успешно создан"); Console.ReadLine();

}

}

}

Программа сразу после запуска проверяет существование рабочего файла в текущем каталоге:

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);

Вы можете также открыть поток и привязать его к файлу с помощью конструктора класса StreamReader:

StreamReader sr = new StreamReader(testFile);

Далее наша программа считывает текстовые строки из файла, вызывая в цикле метод ReadLine:

while(true)

{

String str = sr.ReadLine();

if(str == null)

break;

Console.WriteLine(str);

}

Этот метод возвращает прочитанную строку или значение nullпри достижении конца файла.

После завершения работы с потоком StreamReaderего следует закрыть методомClose:

sr.Close();

Таким образом, наша программа записывает две строки в файл, а затем читает их оттуда и отображает на консоли.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]