Примитивные типы данных и потоки. 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 ();