Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MetodichkaC_14ch1.doc
Скачиваний:
51
Добавлен:
26.03.2016
Размер:
1.61 Mб
Скачать

8.2. Объект FileStream для работы с файлами

Объект FileStream представляет поток, указывающий на какой-либо файл на диске или на местоположение в сети. Хотя этот класс и обладает методами для чтения из файлов и записи в файлы байтов, чаще для выполнения этих функций вам придется обращаться к классам StreamReader и StreamWriter. Это происходит потому, что класс FileStream оперирует байтами и массивами байтов, в то время как классы Stream оперируют символьными данными. Иметь дело с символьными данными оказывается проще, однако придется столкнуться с некоторыми операциями, например, с произвольным доступом к файлам, которые могут осуществляться только посредством объекта FileStream.

Существует несколько способов создания объекта FileStream. Его конструктор обладает большим количеством перегрузок/версий, однако в самом простом случае он требует передачи двух аргументов

— имени файла и значения перечислимого типа FileMode:

FileStream aFile = new FileStream("1.txt", FileMode.OpenOrCreate);

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

Таблица 8.1

Тип FileMode

Элементы перечисляемого типа FileMode

Описание

Append

Открывает файл (если он существует), переводит указатель файла в его конец или создает новый файл. FileMode.Append может использоваться только совместно с членом перечислимого типа FileAccess.Write.

Create

Создает новый файл; если файл с таким именем уже существует, то он уничтожается.

CreateNew

Создает новый файл; если файл с таким именем уже существует, то будет сгенерирована исключительная ситуация.

Open

Открывает существующий файл. Если указанного файла не существует, генерируется исключительная ситуация.

OpenOrCreate

Определяет, что если такой файл существует, то он должен быть открыт, в противном случае создается новый файл. Если такой файл существует, вся информация в нем сохраняется.

Truncate

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

Приведенный выше пример конструктора по умолчанию открывает файл в режиме чтение/запись. Для того чтобы задать другой уровень доступа, следует использовать дополнительный параметр — FileAccess:

FileStream f = new FileStream("1.txt", FileMode.OpenOrCreate, FileAcces.Write);

Эта строка кода откроет файл с разрешением доступа на запись. Любая попытка прочитать содержимое этого файла приведет к возникновению исключительной ситуации. Перечислимый тип FileAccess обладает всего тремя типами: Read, Write и ReadWrite. Это свойство используется в качестве одного из способов варьирования уровня доступа пользователя к файлу в зависимости от уровня его прав.

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

Работа с объектом FileStream достаточна сложна, поэтому может возникнуть вопрос, нет ли какого- либо более простого способа. Не стоит беспокоиться — обычно вся работа с объектом FileStream оказывается скрытой от пользователя за счет работы с объектами StreamWriter и StreamReader и использования их методов для выполнения манипуляций над файлами. Если перед вами не стоит задача перемещать указатель файла на произвольную позицию, то здесь эти классы позволяют значительно упростить работу с файлами.

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