Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c#_Presentation_11.doc
Скачиваний:
0
Добавлен:
11.01.2020
Размер:
740.35 Кб
Скачать

11.10. Использование классов System.Io.StreamReader и System.Io.StreamWriter для работы с файлами

(http://msdn.microsoft.com/ru-ru/library/system.io.streamreader.aspx)

(http://msdn.microsoft.com/ru-ru/library/system.io.streamwriter.aspx)

Форматы объявления объектов StreamReader и StreamWriter:

StreamReader sr = new StreamReader(fileName, [encoding],

[detectEncoding], [bufferSize]);

StreamWriter sw = new StreamWriter(fileName, [append], [encoding],

[bufferSize]);

где:

fileName – строка, содержащая полное имя файла, связанного с объектом StreamReader;

append – определяет, будет ли указанный файл перезаписан (false), либо данные в него будут добавлены (true). Если указанный файл не существует, этот параметр не используется и создается новый файл;

encoding – кодировка символов, которую нужно использовать (одно из свойств класса System.Text.Encoding, таблица 11.6);

detectEncoding – определяет, необходимо ли осуществлять поиск меток порядка следования байтов в начале файла (true или false). Для обнаружения просматриваются первые три байта потока. Автоматически распознается текст в кодировке UTF-8, Unicode с прямым и обратным порядком следования байтов. В противном случае используется кодировка, определяемая пользователем;

bufferSize – значение (Int32, большее 0), определяющее минимальный размер буфера в байтах (задается в 16-разрядных символах). Если заданное значение меньше минимального допустимого размера (128 символов), то используется минимальный допустимый размер.

Таблица 11.16. Основные свойства и методы класса StreamReader из пространства имен System.IO

Имя

Описание

Свойства

BaseStream

Возвращает основной поток.

CurrentEncoding

Получает текущую кодировку символов, используемую текущим объектом StreamReader.

EndOfStream

Получает значение, определяющее, находится ли текущая позиция потока в его конце.

Методы

Close();

Закрывает объект StreamReader и основной поток и освобож-дает все системные ресурсы, связанные с устройством чтения.

DiscardBufferedData();

Очищает внутренний буфер объекта StreamReader.

Peek();

Возвращает целое число, представляющее следующий символ для чтения (позицию ввода), или значение -1 (если доступных для чтения символов нет или поток не поддерживает поиск).

Read();

Read(arrCh,i,n);

Выполняет чтение следующего символа из входного потока и перемещает положение символа на одну позицию вперед.

Считывает в буфер (arrCh) заданное максимальное количество (n) символов из текущего потока, начиная с заданного индекса (i).

ReadBlock(arrCh,i,n);

Считывает заданное максимальное количество (n) символов из текущего потока, начиная с заданного индекса (i), и записывает данные в буфер (arrCh).

ReadLine();

Выполняет чтение строки символов из текущего потока и возвращает данные в виде строки или null (если достигнут конец входного потока).

ReadToEnd();

Считывает поток, начиная с текущей позиции ввода и до его конца.

Таблица 11.17. Основные свойства и методы класса StreamWriter из пространства имен System.IO

Имя

Описание

Свойства

AutoFlush

Получает или задает значение, определяющее, будет ли StreamWriter сбрасывать буфер в основной поток после каждого вызова StreamWriter.Write().

Encoding

Получает кодировку Encoding, в которой осуществляется запись выходных данных.

NewLine

Получает или задает признак конца строки, используемой текущим TextWriter.

Методы

Close();

Закрывает текущий объект StreamWriter (файл) и базовый поток.

Write(v);

Write(sf,v1);

Write(sf,v1,v2);

Write(sf,v1,v2,v3);

Write(sf,v[]);

Write(arrCh);

Write(arrCh,i,n);

Записывает в текстовый файл 1, 2 или 3 объекта (v – числового, строкового, символьного или логического типа) или массива объектов(v[]) в соответствии с заданным форматом (sf).

Записывает в текстовый файл n символов, начиная с i-го, из массива символов (arrCh).

WriteLine(v);

WriteLine(sf,v1);

WriteLine(sf,v1,v2);

WriteLine(sf,v1,v2,v3);

WriteLine(sf,arrV);

WriteLine(arrCh);

WriteLine(arrCh,i,n);

Записывает в текстовый файл 1, 2 или 3 объекта (v – числового, строкового, символьного или логического типа) или массива объектов(arrV) в соответствии с заданным форматом (sf). В завершении выводится признак конца строки.

Записывает в текстовый файл n символов, начиная с i-го, из массива символов (arrCh).

Пример 11.17. Использование объектов StreamWriter и StreamReader соответственно для записи строк в текстовый файл (метод WriteLine), а затем чтения строк из него (метод ReadLine).

using System;

using System.IO;

class TestStreamReader

{ public static void Main()

{ string fname = @"c:\temp\Test.txt";

// Создание экземпляра класса StreamWriter для записи в файл

StreamWriter sw = new StreamWriter(fname);

// Запись строк в файл

for (int i=1; i<5; i++)

sw.WriteLine("Test {0}", i);

Console.WriteLine("Файл " + fname + " записан.");

sw.Close(); // Закрытие файла

Console.ReadLine();

// Создание экземпляра класса StreamReader для чтения из файла

StreamReader sr = new StreamReader(fname);

// Чтение и отображение строк из файла, до достижения его конца

string line;

while ((line = sr.ReadLine()) != null)

Console.WriteLine(line);

sr.Close(); // Закрытие файла

Console.ReadLine();

}

}

/* Вывод:

Файл c:\temp\Test.txt записан.

Test 1

Test 2

Test 3

Test 4

*/

В этом примере чтение и отображение строк из файла можно реализовать и иначе, результат при этом не изменится.

while (sr.Peek() > -1) // или while (!sr.EndOfStream)

Console.WriteLine(sr.ReadLine());

или

while (sr.Peek() >= 0) // или while (!sr.EndOfStream)

Console.Write((char)sr.Read());

или

Console.WriteLine(sr.ReadToEnd());

или

char[] c = null;

c = new char[32];

sr.Read(c, 0, c.Length);

Console.WriteLine(c);

33

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