- •Лабораторная работа № 9
- •Содержание
- •1. Теоретическая часть
- •1.1 Потоки
- •1.2 Классы для ввода-вывода
- •1.3 Объект FileStream
- •1.4 Позиция внутри файла
- •1.5 Асинхронный доступ к файлам
- •2. Практическая часть
- •2.1 Чтение данных из файла с произвольным доступом
- •2.2 Запись данных в файл с произвольным доступом
- •2.3 Работа с потоками. Выходной поток
- •2.4 Работа с потоками. Входной поток
- •2.5 Асинхронное считывание файлов с использованием событий
- •3. Задания
1.3 Объект FileStream
Объект FileStreamпредставляет поток, указывающий на какой-либо файл на диске или на местоположение в сети. Хотя этот класс и обладает методами для чтения из файлов и записи в файлы байтов, чаще для выполнения этих функций придется обращаться к классамStreamReaderиStreamWriter. Это происходит потому, что классFileStreamоперирует байтами и массивами байтов, в то время как классыstreamоперируют символьными данными.
Существует несколько способов создания объекта FileStream. Его конструктор обладает большим количеством перегрузок/версий, однако в самом простом случае он требует передачи двух аргументов — имени файла и значения перечислимого типаFileMode:
FileStream aFile = new FileStream("Log.txt", FileMode.OpenOrCreate);
У перечислимого типа FileModeимеется несколько членов, которые позволяют задавать то, каким образом файл открывается или создается. Допускается их использование в различных сочетаниях.
|
Элементы перечисляемого типа FileMode |
Описание |
|
Append |
Открывает файл (если он существует), переводит указатель файла в его конец или создает новый файл. FileMode. Append может использоваться только совместно с членом перечислимого типа FileAccess.Write. |
|
Create |
Создает новый файл; если файл с таким именем уже существует, то он уничтожается. |
|
CreateNew |
Создает новый файл; если файл с таким именем уже существует, то будет сгенерирована исключительная ситуация. |
|
Open |
Открывает существующий файл. Если указанного файла не существует, генерируется исключительная ситуация. |
|
OpenOrCreate |
Определяет, что если такой файл существует, то он должен быть открыт, в противном случае создается новый файл. Если такой файл существует, вся информация в нем сохраняется. |
|
Truncate |
Открывает существующий файл, а вся информация, которая в нем хранилась, уничтожается. После этого мы получаем возможность записать в файл абсолютно новую информацию, однако при этом дата создания файла остается прежней. Этот файл должен существовать, иначе будет сгенерирована исключительная ситуация. |
1.4 Позиция внутри файла
Класс FileStreamподдерживает внутренний указатель файла, ссылающийся на то место в файле, в котором будет производиться очередная операция чтения или записи. В большинстве случаев при открытии файла указатель устанавливается в начало файла, однако такое поведение указателя может быть изменено, что позволяет приложению осуществлять чтение или запись в любой точке файла. Можно также организовать произвольный доступ к файлу и осуществлять поиск конкретной позиции в файле. Такой подход позволяет сэкономить массу времени при работе с очень большими файлами, поскольку можно постоянно отыскивать необходимую позицию.
1.5 Асинхронный доступ к файлам
Доступ ко всем файлам в большинстве примеров осуществлялся синхронным образом. Это означает, что выполнение приложения будет приостановлено до тех пор, пока операция чтения или записи не будет завершена. Это оказывается вполне приемлемым для большинства приложений, однако иногда возникает необходимость записать очень большое количество данных, при этом у приложения совершенно отсутствует необходимость дожидаться окончания операции записи. Или, например, требуется считать информацию из файла, находящегося в сети с медленным соединением; в этом случае ваше приложение могло бы продолжать выполнять какую-либо другую работу, параллельно внося соответствующие изменения в управляющие элементы пользовательского интерфейса, отражающие процесс загрузки данных. Такой способ доступа к данным называется асинхронным. Обычно это означает, что приложение может выполнять какие-либо другие действия параллельно с неким процессом, например, с операцией ввода-вывода файла, вместо того чтобы дожидаться окончания этого процесса.
