
- •11. Организация работы с файлами
- •11.1. Использование стандартных диалоговых окон открытия и сохранения файлов
- •11.2. Использование стандартного диалогового окна обзора папок
- •11.3. Использование класса System.Io.File для работы с файлами
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •If (!File.Exists(path))
- •11.4. Использование класса System.Io.Directory для работы с папками
- •If (Directory.Exists(currentDir)) // Если папка существует
- •If (Directory.Exists(sourceDir) & Directory.Exists(destDir) &
- •If (Directory.Exists(destDir)) // Если папка существует
- •11.5. Использование класса System.Io.Path для работы со строкой пути к папке или файлу
- •If (Path.HasExtension(path1))
- •If (!Path.HasExtension(path2))
- •If (!Path.IsPathRooted(path3))
- •11.6. Использование класса System.Io.FileInfo для работы с файлами
- •If (!fi1.Exists)
- •11.7. Использование класса System.Io.DirectoryInfo для работы с файлами и папками
- •If (cd.Exists) // Если заданная папка существует...
- •If (sd.Exists & dd.Exists & !md.Exists)
- •If (dd.Exists) // Если папка существует
- •11.8. Использование класса System.Io.DriveInfo для работы с дисками
- •11.9. Использование класса System.Io.FileStream для работы с файлами
- •If (fs.CanRead && fs.CanWrite)
- •11.10. Использование классов System.Io.StreamReader и System.Io.StreamWriter для работы с файлами
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);