C# для профессионалов. Том II
Шрифт:
Перечисление | Значения |
---|---|
FileMode (режим файла) | Append (добавить), Create (создать), CreateNew (создать новый), Open (открыть), OpenOrCreate (открыть или создать), Truncate (обрезать) |
FileAccess (доступ к файлу) | Read (чтение), ReadWrite (чтение-запись), Write (запись) |
FileShare (общий
| None (нет), Read (чтение), ReadWrite (чтение-запись), Write (запись) |
Отметим, что в случае
FileMode
могут порождаться исключения, если запросить режим, который несогласован с существующим статусом файла. Append
, Open
и Truncate
будут порождать исключение, если файл еще не существует, a CreateNew
будет порождать исключение, если он существует. Create
и OpenOrCreate
будут удовлетворять любому сценарию, но Create
будет удалять любой существующий файл для замены его новым, вначале пустым файлом. Существует большое число конструкторов для
FileSream
. Три простейшие из них работают следующим образом: // создает файл с доступом read-write и предоставляет другим потокам
// доступ на чтение
FileStream fs = new FileStream(@"C:\C# Projects\Projects.doc", FileMode.Create);
// как и выше, но мы получаем доступ к файлу только на запись
FileStream fs2 = new FileStream(@"C:\C# Projects\Projects2.doc", FileMode.Create, FileAccess.Write);
// как и выше, но другие потоки не имеют никакого доступа к файлу,
// пока fs3 открыт
FileStream fs3 = new FileStream(@"C:\C# Projects\Projects3.doc", FileMode.Create, FileAccess.Read, FileShare.None);
Из этого кода можно видеть, что эти перегружаемые версии конструкторов предоставляют значения по умолчанию
FileAcces.ReadWrite
и FileShare.Read
для третьего и четвертого параметров. Также можно создать файловый поток из экземпляра FileInfo
: FileInfo MyFile4 = new FileInfo(@"C:\C# Projects\Projects4.doc");
FileStream fs4 = MyFile4.OpenRead;
FileInfo MyFile5 = new FileInfo(@"C:\C# Projects\Projects5.doc");
FileStream fs5 = MyFile5.OpenWrite;
FileInfo MyFile6 = new FileInfo(@"C:\C# Projects\Projects6.doc");
FileStream fs6 = MyFile6.Open(FileMode.Append, FileAccess.Read, FileShare.None);
FileInfo MyNewFile = new FileInfo(@"C:\C# Projects\ProjectsNew.doc");
FileStream fs7 = MyNewFile.Create;
FileInfo.OpenRead
поставляет поток, предоставляющий доступ только для чтения к существующему файлу, в то время как FileInfo.OpenWrite предоставляет доступ для чтения-записи. FileInfo.Open
позволяет явно определить параметры режима, доступа и общего
Не забудьте, что по окончании работы поток необходимо закрыть:
fs.Close;
Закрытие потока освобождает связанные с ним ресурсы и позволяет другим приложениям настроить потоки на тот же самый файл. Для чтения и записи данных в поток
FileStream
реализует ряд методов. Метод
ReadByte
является простейшим способом чтения данных: он захватывает один байт из потока и преобразовывает результат в int, имеющее значение между 0 и 255. По достижении конца потока возвращается -1: int NextByte = fs.ReadByte;
Если желательно прочитать несколько байтов за один раз, можно вызвать метод
Read
, который читает указанное число байтов в массиве. Read
возвращает реально прочитанное число байтов, если это значение равно нулю, то это говорит о конце потока: // считать 100 байтов int nBytes = 100;
byte [] ByteArray = new byte[nBytes];
int nBytesRead = fs.Read(ByteArray, 0, nBytes);
Второй параметр в методе
Read
— смещение, которое указывает операции Read
начать заполнение массива с элемента, отличного от первого. Если требуется записать данные в файл, то существует два параллельных метода
WriteByte
и Write
. WriteByte
записывает один байт в поток: byte Next Byte = 100; fs.WriteByte(NextByte);
Write
, с другой стороны, записывает массив байтов: // чтобы записать 100 байтов
int nBytes = 100;
byte [] ByteArray = new byte[nBytes];
// здесь массив заполняется значениями, которые надо записать
fs.Write(BуteArray, 0, nBytes);
Как и для метода
Read,
второй параметр позволяет начать записывать с некоторого места, отличного от начала массива. Оба метода WriteByte
и Write
возвращают void
. Помимо этих методов
FileStream
реализует также другие методы и свойства для выполнения задач учета, типа определения числа байтов в потоке, блокирования потока или очистки буфера. Эти методы обычно не требуются для базового чтения и записи, а если они потребуются, все детали находятся в документации MSDN. Пример: объект чтения двоичного файла
Для иллюстрации использования класса
FileStream
напишем пример BinaryFileReader
, который считывает и выводит любой файл. Он создается в Visual Studio.NET как оконное приложение. Добавляем один пункт меню, который выводит стандартный диалог OpenFileDialog
, запрашивающий файл для чтения, а затем выводит файл. Так как мы читаем двоичные файлы, нам необходимо иметь возможность выводить непечатные символы. Делаем это, выводя каждый байт файла отдельно, по 16 байтов в каждой строке многострочного текстового поля. Если байт представляет печатный символ ASCII, выводится этот символ, иначе выводится значение байта в шестнадцатеричном формате. В любом случае, мы дополняем выводимый текст пробелами, так что каждый выводимый 'байт' занимает четыре столбца, чтобы байты аккуратно выровнялись друг под другом.
Поделиться:
Популярные книги
Лорд Системы 12
12. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Младший научный сотрудник 2
2. МНС
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Цеховик. Книга 2. Движение к цели
2. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Неестественный отбор.Трилогия
Неестественный отбор
Детективы:
триллеры
6.40
рейтинг книги
Попаданка в семье драконов
Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.37
рейтинг книги
Звезда сомнительного счастья
Фантастика:
фэнтези
6.00
рейтинг книги
Беглец
15. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Я – Орк
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Смерть может танцевать 2
2. Безликий
Фантастика:
героическая фантастика
альтернативная история
6.14
рейтинг книги
Идеальный мир для Лекаря 18
18. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Жандарм
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Путь Шедара
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Гром над Империей. Часть 1
5. Гром над миром
Фантастика:
фэнтези
5.20