Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 9 Файлы.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
140 Кб
Скачать
☆

10.1.1. Класс FileStream

Объект класса FileStream представляет поток, указывающий на дисковый файл или сетевой путь. В то время как класс предоставляет методы для чтения и записи байт в файл, чаще всего для выполнения этих функций используются классы StreamReader или StreamWriter. Класс FileStream оперирует байтами и байтовыми массивами, а классы Stream — символьными данными. Работать с символьными данными проще, но некоторые операции, например, произвольный доступ к файлу (доступ к данным в некоторой точке посреди файла), могут выполняться только посредством объекта FileStream.

Есть несколько способов создания объекта FileStream. Конструктор имеет много различных перегрузок, но простейшая из них принимает два аргумента: имя файла и значение перечисления FileMode:

FileStream aFile =

new FileStream(filename, FileMode.Member);

Перечисление FileMode состоит из нескольких членов, которые специфицируют способ открытия или создания файла. Другой часто используемый конструктор выглядит так:

FileStream aFile =

new FileStream (filename, FileMode.Member,

FileAccess.Member);

Третий параметр — член перечисления FileAccess — задает способ специфицирования назначения потока. Члены перечисления FileAccess приведены в табл. 10.3.

Таблица 10.3.

Члены перечисления FileAccess

Член

Описание

Read

Открывает файл только для чтения

Write

Открывает файл только для записи

ReadWrite

Открывает файл только для чтения или записи

Попытка выполнить действие, отличное от специфицированного членом перечисления FileAccess, приведет к генерации исключения. Это свойство часто используется в качестве способа варьировать доступ пользователя к файлу на основе его уровня авторизации.

В версии конструктора FileStream, не использующего параметр-перечисление FileAccess, применяется значение по умолчанию, которым является FileAccess.ReadWrite.

Члены перечисления FileMode показаны в табл. 10.4. Что в действительности происходит, когда каждое из этих значений используется, зависит от того, ссылается ли указанное имя файла на существующий файл. Элементы этой таблицы ссылаются на позицию в файле, на которую установлен поток при его создании. Если не установлено иначе, поток устанавливается в начало файла.

Таблица 10.4.

Члены перечисления FileMode

Член

Поведение при

существующем файле

Поведение при

отсутствии файла

Append

Файл открыт, поток установлен в конец файла. Может использоваться только в сочетании с FileAccess .Write

Создается новый файл. Может использоваться только в сочетании с FileAccess.Write

Create

Файл уничтожается и на его месте создается новый

Создается новый файл

CreateNew

Генерируется исключение

Создается новый файл

Open

Файл открывается, поток позиционируется в начало файла

Генерируется исключение

OpenCreate

файл открывается, поток позиционируется в начало файла

Создается новый файл

Truncate

файл открывается и очищается. Поток позиционируется в начало файла. Исходная дата создания файла остается неизменной

Генерируется исключение

Оба класса — и File, и FileInfo — предоставляют методы OpenRead() и OpenWrite(), облегчающие создание объектов FileStream. Первый открывает файл с доступом только для чтения, а второй позволяет доступ только для записи. Эти методы являются сокращениями, так что не нужно предоставлять всю необходимую информацию в форме параметров конструктора FileStream. Например, следующая строка кода открывает файл Data.txt с доступом только для чтения:

FileStream aFile = File.OpenRead("Data.txt");

Следующий код выполняет ту же функцию:

FileInfo aFileInfo = new FileInfo("Data.txt");

FileStream aFile = aFileInfo.OpenRead();