Иллюстрированный самоучитель по Architecture .NET

Примитивные типы данных и потоки. TextReader и TextWriter.

Классы, производные от Stream (Поток, Абстрактный последовательный файл), целесообразно использовать тогда, когда нужно читать или писать байты данных блоками. Если необходимо прочитать в поток или записать из потока простой тип, такой как Boolean (булев, логический), String (Строка) или Int32, следует использовать классы BinaryReader и BinaryWriter. Пример Binary (Двоичный) в папке FilelO показывает, как использовать эти классы. Нужно создать соответствующий поток (FileStream в примере) и передать его в качестве параметра в конструктор BinaryReader или BinaryWriter. Потом можно использовать один из перегруженных методов Read (Чтение) или Write (Запись) для чтения данных из потока или записи данных в поток. (Причем пример опять нужно выполнить дважды. Сначала файл создается и в него записываются данные. Во второй разданные читаются из файла.)

FileStream *fs = new FileStream(
"BinaryTest.bin", FileMode::OpenOrCreate);
if (fs › Length == 0) // если Длина == 0
{
Console::WriteLine("Writing Data…");
// Запись данных
BinaryWriter *w = new BinaryWriter(fs);
for (short i = 0; i < 10; i++) w › Write(i);
// Запись
w › Close ();
}
else
{
BinaryReader *r = new BinaryReader(fs);
for (int i = 0; i < 10; i++)
Console::WriteLine(r › ReadInt16());
r › Close();
}
fs › Close();

TextReader и TextWriter

В абстрактных классах TextReader и TextWriter данные рассматриваются как последовательный поток символов (то есть, просто как текст). TextReader имеет следующие методы: Close (Закрыть), Peek (Считывание элемента данных), Read (Чтение), ReadBlock, ReadLine и ReadToEnd.TextWriter содержит методы типа Close (Закрыть), Flush (Дозапись), Write (Запись) и WriteLine. Перегруженные методы Read (Чтение) читают символы из потока. Перегруженные методы Write (Запись) и WriteLine записывают данные различных типов в поток. Если объект записывается в поток, то используется метод ToString объекта.

StringReader и StringWriter являются производными классами от классов TextReader и TextWriter соответственно. StringReader и StringWriter читают и записывают данные в символьную строку, которая сохраняется в базовом объекте StringBuilder. Конструктор StringWriter может принимать объект StringBuilder. Класс StringBuilder обсуждался в главе 3 "Программирование на управляемом C++".

StreamReader и StreamWriter также являются производными классами от классов TextReader и TextWriter. Они читают текст из объекта и записывают текст в объект Stream (Поток, Абстрактный последовательный файл). Так же как и в случае классов BinaryReader и BinaryWriter, можно создать объект Stream (Поток, Абстрактный последовательный файл) и передать его в конструктор StreamReader или StreamWriter. Следовательно, эти классы могут использовать любые унаследованные от Stream (Поток, Абстрактный последовательный файл) классы хранения данных. Пример Text (Текст) из папки File использует классы StreamReader и StreamWriter. Программу необходимо выполнить дважды: первый раз – чтобы создать файл, а затем второй раз – чтобы прочитать его.

FileStream *fs = new FileStream(
"TextTest.txt", FileMode::OpenOrCreate);
if (fs › Length == 0) // если Длина == 0 {
Console::WriteLine("Writing Data…"); // Запись данных
StreamWriter *sw = new StreamWriter(fs);
sw › Write(100); // Запись
sw › WriteLine(" One Hundred"); // Сто
sw › WriteLine("End of File"); // Конец Файла
sw › Close();
}
else
{
String *text; // Строка
StreamReader *sr = new StreamReader(fs);
text = sr › ReadLine(); // текст
while (text!= 0)
// пока (текст!= 0)
{
Console::WriteLine(text);
// текст
text = sr › ReadLine();
// текст
}
sr › Close ();
}
fs › Close ();
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.