Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c#_Presentation_11.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
740.35 Кб
Скачать

11.9. Использование класса System.Io.FileStream для работы с файлами

(http://msdn.microsoft.com/ru-ru/library/system.io.filestream.aspx)

Формат объявления объекта FileStream:

FileStream fs = new FileStream(fileName, mode, [access], [share],

[bufferSize], [options]);

где:

fileName – строка, содержащая полное имя файла, связанного с объектом FileStream;

mode – константа из перечисления System.IO.FileMode, определяющая способ открытия или создания файла (таблица 11.8);

access – константа из перечисления System.IO.FileAccess, определяющая способ доступа к файлу (таблица 11.8);

share – константа из перечисления System.IO.FileShare, определяющая способ совместного использования файла процессами (таблица 11.8);

bufferSize – значение (Int32, большее 0), определяющее размер буфера в байтах. Для значений от 0 до 8 фактический размер буфера устанавливается равным 8 байт;

options – константа из перечисления System.IO.FileOptions, задающая дополнительные параметры файла (таблица 11.8).

Таблица 11.15. Основные свойства и методы класса FileStream из пространства имен System.IO

Имя

Описание

Свойства

CanRead

Получает значение, определяющее наличие поддержки операций чтения в текущем потоке (true или false).

CanSeek

Получает значение, определяющее наличие поддержки операций поиска в текущем потоке (true или false).

CanTimeout

Получает значение, показывающее, может ли для данного потока истечь время ожидания (для большинства реализаций потока равно false).

CanWrite

Получает значение, определяющее наличие поддержки операций записи в текущем потоке (true или false).

IsAsync

Получает значение, определяющее, как был открыт FileStream – синхронно (false) или асинхронно (true).

Length

Получает длину потока в байтах.

Name

Получает имя FileStream, передаваемое в конструктор.

Position

Получает или задает текущую позицию этого потока.

ReadTimeout

Получает или задает значение (в миллисекундах), определяющее период, в течение которого поток будет пытаться выполнить операцию чтения, прежде чем истечет время ожидания.

WriteTimeout

Получает или задает значение (в миллисекундах), определяющее период, в течение которого поток будет пытаться выполнить операцию записи, прежде чем истечет время ожидания.

Методы

BeginRead(arB,sI, nB,cal,v);

Начинает операцию асинхронного чтения. Аргументы метода:

arB – буфер (байтовый массив), в который необходимо считать данные;

sI – смещение байтов в буфере, с которого начинается запись данных, считанных из потока;

nB – максимальное число байтов, предназначенных для чтения;

cal – метод, вызываемый после завершения операции асинхронного чтения;

v – предоставляемый пользователем объект, являющийся отличительным признаком данного конкретного запроса на асинхронное чтение от других запросов.

BeginWrite(arB,sI, nB,cal,v);

Начинает операцию асинхронной записи. Аргументы метода:

arB – буфер (байтовый массив), содержащий данные для записи в текущий поток;

sI – смещение байтов в буфере, с которого начинается копирование байтов в текущий поток;

nB – максимальное число байтов, предназначенных для записи;

cal – метод, вызываемый после завершения операции асинхронной записи;

v – предоставляемый пользователем объект, являющийся отличительным признаком данного конкретного запроса на асинхронную запись от других запросов.

Close();

Закрывает FileStream и освобождает все системные ресурсы, связанные с FileStream.

CopyTo(StrmDest);

CopyTo(StrmDest,ib);

Считывает байты из текущего потока и записывает их в другой поток (StrmDest), используя указанный размер буфера (ib).

CopyToAsync (StrmDest);

CopyToAsync (StrmDest,ib);

CopyToAsync (StrmDest,ib,token);

Асинхронно считывает байты из текущего потока и записывает их в другой поток (StrmDest), используя указанный размер буфера (ib) и токена (token) для отслеживания запросов отмены (по умолчанию – None).

EndRead(asyncRes);

Ожидает завершения отложенной асинхронной операции чтения и возвращает число байтов, считанных из потока. Аргументом метода является ссылка на ожидаемый отложенный асинхронный запрос (asyncRes).

EndWrite();

Ожидает завершения асинхронной операции записи. Аргументом метода является ссылка на ожидаемый отложенный асинхронный запрос (asyncRes).

Lock(i,n);

Запрещает другим процессам чтение объекта FileStream или запись в этот объект.

Read(arB,i,n);

Выполняет чтение блока байтов из потока (файла) и запись в заданный буфер (массив байтов – arB), n байтов, начиная с i-го.

ReadAsync(arB,i,n);

Асинхронно считывает в буфер (массив байтов – arB) последова-тельность байтов (n байтов) из текущего потока (файла), начиная с i-ой позиции, и перемещает позицию в потоке на число считан-ных байтов. Имеется в .NET Framework начиная с версии 4.5.

ReadByte();

Считывает байт из файла и перемещает позицию чтения на один байт.

Seek(is,so);

Устанавливает текущее положение данного потока на заданное значение, определяемое путем смещения (is) относительно опорной точки (so). Опорная точка задается константой из перечисления SeekOrigin (Begin – начало потока, Current – текущее положение в потоке, End – конец потока).

SetLength(L);

Устанавливает длину данного потока на заданное значение (L).

Unlock(i,n);

Разрешает доступ другим процессам ко всему ранее заблокиро-ванному файлу или его части (n байтов, начиная с i-го).

Write(arB,i,n);

Записывает в поток (файл) блок байтов из буфера (массива байтов – arB), n байтов, начиная с i-го.

WriteAsync(arB,i,n);

Асинхронно записывает из буфера (массив байтов – arB) последовательность байтов (n байтов) в текущий поток (файл), начиная с i-ой позиции, и перемещает текущую позицию внутри потока на число записанных байтов. Имеется в .NET Framework начиная с версии 4.5.

WriteByte();

Записывает байт в текущую позицию в потоке (файле).

Пример 11.14. Использование свойств CanRead и CanWrite класса FileStream для определения возможности чтения и записи файла. Результатом выполнения этого примера будет строка: "Файл c:\temp\Test.txt не перезаписываем". Чтобы получить выходное сообщение "Файл c:\temp\Test.txt может быть использован для записи и чтения.", нужно изменить в конструкторе FileStream параметр FileAccess на ReadWrite.

using System;

using System.IO;

class TestRW

{ public static void Main(String[] args)

{ string fname = @"c:\temp\Test.txt";

FileStream fs = new FileStream(fname, FileMode.OpenOrCreate,

FileAccess.Read);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]