Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готовые билеты.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
44 Кб
Скачать
☆

Выполнять обмен с внешними устройствами можно на уровне:

• двоичного представления данных (BinaryReader, BinaryWriter);

• байтов (FileStream);

• текста, то есть символов (StreamWriter, StreamReader).

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

Использование классов файловых потоков в программе предполагает следующие операции:

1. Создание потока и связывание его с физическим файлом.

2. Обмен (ввод-вывод).

3. Закрытие файла.

Значения перечисления FileAccess

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

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

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

Значения перечисления FileMode

Append Открыть файл, если он существует, и установить текущий указатель в конец файла. Если файл не существует, создать новый файл

Create Создать новый файл. Если в каталоге уже существует файл с таким же именем, он будет стерт

CreateNew Создать новый файл. Если в каталоге уже существует файл с таким же именем, возникает исключение IOException Open " Открыть существующий файл

OpenOrCreate Открыть файл, если он существует. Если нет, создать файл с таким именем

Truncate Открыть существующий файл. После открытия он должен быть обрезан до нулевой длины

12) Потоки байтов.

Ввод-вывод в файл на уровне байтов выполняется с помощью класса FilleStream, который является наследником абстрактного класса Stream, определяющего набор стандартных операций с потоками.

Элементы класса Stream

BeginRead, BeginWrite Начать асинхронный ввод или вывод

CanRead, CanWrite CanSeek Свойства, определяющие, какие операции поддерживает поток: чтение , прямой доступ и/или запись

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

EndRead, EndWrite Ожидать завершения асинхронного ввода; закончить асинхронный вывод

Flush Записать данные из буфера в связанный с потоком источник данных и очистить буфер. Если для данного потока буфер не используется, то этот метод ничего не делает

Length Возвратить длину потока в байтах

Position Возвратить текущую позицию в потоке

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

Seek Установить текущий указатель потока на заданную позицию

SetLength Установить длину текущего потока

Write, WriteByte Записать последовательность байтов (или один байт) в текущий поток и переместить указатель в потоке на количество записанных байтов

Класс FileStream реализует эти элементы для работы с дисковыми файлами. Для определения режимов работы с файлом используются стандартные перечисления FileMode, FileAccess и FileShare

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

FileNotFoundException, если файла с указанным именем в указанном каталоге не существует;

DirectoryNotFoundException, если не существует указанный каталог;

Argument Exception, если неверно задан режим открытия файла;

IOException, если файл не открывается из-за ошибок ввода-вывода.

13) Асинхронный ввод-вывод.

Класс Stream (и, соответственно, FileStream) поддерживает два способа выполнения операций ввода-вывода: синхронный и асинхронный. По умолчанию файлы открываются в синхронном режиме, то есть последующие операторы выполняются только после завершения операций ввода-вывода. Для длительных файловых операций более эффективно выполнять ввод-вывод асинхронно, в отдельном потоке выполнения1. При этом в первичном потоке можно выполнять другие операции.

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

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

Аналогично выполняется и асинхронный вывод.