| Члены | Описание |
|---|---|
| CanRead CanSeek CanWrite | Определяет, поддерживает ли текущий поток чтение, поиск и/или запись |
| Close() | Завершает текущий поток и освобождает все связанные с текущим потоком ресурсы (например, сокеты и дескрипторы файлов) |
| Flush() | Обновляет связанный источник данных или хранилище в соответствии с текущим состоянием буфера, а затем очищает буфер. Если поток не реализует буфер, этот метод не делает ничего |
| Length | Возвращает длину потока в байтах |
| Position | Определяет позицию в текущем потоке |
| Read() ReadByte() | Читает последовательность байтов (или один байт) из текущего потока и сдвигает указатель позиции в соответствии со считанным числом байтов |
| Seek() | Устанавливает указатель в заданную; позицию в текущем потоке |
| SetLength() | Устанавливает длину текущего потока |
| Write() WriteByte() | Записывает последовательность байтов (или один байт) в текущий поток и сдвигает указатель позиции в соответствии со считанным числом байтов |
Работа с FileStream
Класс FileStream обеспечивает реализацию абстрактных членов Stream в виде, подходящем для файловых потоков. Это довольно примитивный поток – он может читать или записывать только один байт или массив байтов. На самом деле необходимость непосредственного взаимодействия с членами типа FileStream возникает очень редко. Вы чаще будете использовать различные
Предположим, что мы создали новое консольное приложение FileStreamApp. Нашей целью является запись простого текстового сообщения в новый файл с именем myMessage.dat. Но поскольку FileStream может воздействовать только на отдельные байты, требуется перевести тип System.String в соответствующий массив байтов. К счастью, в пространстве имен System.Text определяется тип Encoding, предлагающий члены, которые выполняют кодирование и декодирование строк и массивов байтов (для подробного описания типа Encoding обратитесь к документации .NET Framework 2.0 SDK).
После выполнения кодирования массив байтов переводится в файл с помощью метода FileStream.Write(). Чтобы прочитать байты обратно в память, необходимо переустановить внутренний указатель позиции потока (с помощью свойства Position) и вызвать метод ReadByte(). Наконец, массив байтов и декодированная строка выводятся на консоль. Вот полный текст соответствующего метода Main().
// Не забудьте 'использовать' System.Text.
static void Main(string[] args) {
Console.WriteLine("***** Забавы с FileStreams *****\n");
// Получение объекта FileStream.
FileStream fStream = File.Open(@"C:\myMessage.dat", FileMode.Create);
// Кодирование строки в виде массива байтов.
string msg = "Привет!";
byte[] msgAsByteArray = Encoding.Default.GetBytes(msg);
// Запись byte[] в файл.
fStream.Write(msgAsByteArray, 0, msgAsByteArray.Length);
// Переустановка внутреннего указателя позиции потока.
fStream.Position = 0;
// Чтение типов из файла и вывод на консоль….
Console.Write("Ваше сообщение в виде массива байтов: ");
byte[] bytesFromFile = new byte[msgAsByteArray.Length];
for (int i = 0; i ‹ msgAsByteArray.Length; i++) {
bytesFromFile[i] = (byte)fStream.ReadByte();
Console.Write(bytesFromFile[i]);
}