for (int i = 0; i < msgAsByteArray.Length; i++)
{
bytesFromFile[i] = (byte)fStream.ReadByte();
Console.Write(bytesFromFile[i]);
}
// Вывести декодированное сообщение.
Console.Write("\nDecoded Message: ");
Console.WriteLine(Encoding.Default.GetString(bytesFromFile));
Console.ReadLine();
}
File.Delete("myMessage.dat");
В приведенном примере не только производится наполнение файла данными, но также демонстрируется основной недостаток прямой работы с типом FileStream
Stream типы работают в похожей манере. Например, чтобы записать последовательность байтов в область памяти, понадобится создать объект MemoryStream.Как упоминалось ранее, в пространстве имен System.IO
Stream.Работа с типами StreamWriter и StreamReader
Классы StreamWriter
StreamReader удобны всякий раз, когда нужно читать или записывать символьные данные (например, строки). Оба типа по умолчанию работают с символами Unicode; тем не менее, это можно изменить за счет предоставления должным образом сконфигурированной ссылки на объект System.Text.Encoding. Чтобы не усложнять пример, предположим, что стандартная кодировка Unicode вполне устраивает.Класс StreamReader
TextReader, как и связанный с ним тип StringReader (обсуждается далее в главе). Базовый класс TextReader предоставляет каждому из своих наследников ограниченный набор функциональных средств, в частности возможность читать и "заглядывать" в символьный поток.Класс StreamWriter
StringWriter, который будет рассматриваться позже) порожден от абстрактного базового класса по имени TextWriter, в котором определены члены, позволяющие производным типам записывать текстовые данные в текущий символьный поток.Чтобы содействовать пониманию основных возможностей записи в классах StreamWriter
StringWriter, в табл. 20.8 перечислены основные члены абстрактного базового класса TextWriter.На заметку!
Вероятно, последние два члена классаTextWriter покажутся знакомыми. Вспомните, что тип System.Console имеет члены Write() и WriteLine(), которые выталкивают текстовые данные на стандартное устройство вывода. В действительности свойство Console.In является оболочкой для объекта TextWriter, a Console.Out — для TextWriter.Производный класс StreamWriter
Write(), Close() и Flush(), а также определяет дополнительное свойство AutoFlush. Установка этого свойства в true заставляет StreamWriter выталкивать данные при каждой операции записи. Имейте в виду, что за счет установки AutoFlush в false можно достичь более высокой производительности, но по завершении работы с объектом StreamWriter должен быть вызван метод Close().Запись в текстовый файл
Чтобы увидеть класс StreamWriter
StreamWriterReaderApp и импортируйте пространства имен System.IO и System.Text. В показанном ниже коде с помощью метода File.CreateText() создается новый файл reminders.txt внутри текущего каталога выполнения. С применением полученного объекта StreamWriter в новый файл будут добавляться текстовые данные.using System;
using System.IO;
using System.Text;
Console.WriteLine("***** Fun with StreamWriter / StreamReader *****\n");
// Получить объект StreamWriter и записать строковые данные.
using(StreamWriter writer = File.CreateText("reminders.txt"))
{
writer.WriteLine("Don't forget Mother's Day this year...");
writer.WriteLine("Don't forget Father's Day this year...");
writer.WriteLine("Don't forget these numbers:");
for(int i = 0; i < 10; i++)
{
writer.Write(i + " ");
}