Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 391
Эндрю Троелсен
static void Main(string[] args) {
Console.WriteLine("*** Забавы с StreamWriter/StreamReader ***\n");
// Get a StreamWriter and write string data.
StreamWriter writer = new StreamWriter("reminders.txt");
…
// Now read data from file.
StreamReader sr = new StreamReader("reminders.txt");
…
}
Видеть так много идентичных, на первый взгляд, подходов к реализации ввода-вывода, может быть, немного странно, но имейте в виду, что конечным результатом здесь оказывается гибкость. Так или иначе, вы смогли увидеть, как можно извлекать символьные данные из файлов и помещать их в файлы, используя типы StreamWriter и StreamReader, и теперь мы с вами можем рассмотреть роль классов StringWriter и StringReader.
Исходный код. Проект StreamWriterReaderApp размещен в подкаталоге, соответствующем главе 16.
Работа с типами StringWriter и StringReader
Используя типы StringWriter и StringReader, вы можете обращаться с текстовой информацией, как с потоком символов в памяти. Это может оказаться полезным тогда, когда необходимо добавить символьную информацию в соответствующий буфер. В следующем примере блок строковых данных записывается в объект StringWriter, а не в файл на локальном жестком диске.
static void Main(string[] args) {
Console.WriteLine("*** Забавы с StringWriter/StringReader ***\n");
// Создание StringWriter и вывод символьных данных в память.
StringWriter strWriter = new StringWriter();
strWriter.WriteLine("He забыть о дне рождения мамы…");
strWriter.Close();
// Получение копии содержимого (сохраненного в строке) и
// вывод на консоль.
Console.WriteLine("Содержимое StringWriter:\n{0}", strWriter);
}
Ввиду того, что и StringWriter, и StreamWriter получаются из одного и того же базового класса (TextWriter), для них используется приблизительно одинаковая программная логика записи. Однако ввиду самой своей природы, класс StringWriter позволяет извлечь объект System.Text.StringBuilder с помощью метода GetStringBuilder().
static void Main(string[] args) {
Соnsоlе.WriteLine("*** Забавы с StringWriter/StringReader ***\n'');
…
// Создание StringWriter и вывод символьных данных в память.
StringWriter strWriter = new StringWriter();
…
// Получение внутреннего StringBuilder.
StringBuilder sb = strWriter.GetStringBuilder();
sb.Insert(0, "Эй!! ");
Console.WriteLine("-› {0}", sb.ToString());
sb.Remove(0, "Эй!! ".Length);
Console.WriteLine("-› {0}", sb.ToString());
}
Чтобы прочитать данные из символьного потока, используйте соответствующий тип StringReader, который (в соответствии с ожиданиями) функционирует так же, как и родственный ему класс StreamReader. Фактически класс StringReader просто переопределяет наследуемые члены, чтобы обеспечить чтение из блока символьных данных, а не из файла.
static void Main(string[] args) {
Console.WriteLine("*** Забавы с StringWriter/StringReader ***\n");