Программирование >>  Обработка исключительных ситуаций 

1 ... 79 80 81 [ 82 ] 83 84 85 ... 142


Работа с файлами 249

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

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

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

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

Каждый класс файловых потоков содержит несколько вариантов конструкторов, с помощью которых можно создавать объекты этих классов различными способами и в различных режимах.

Например, файлы можно открывать только для чтения, только для записи или для чтения и записи. Эти режимы доступа к файлу содержатся в перечислении FileAccess, определенном в пространстве имен System. 10. Константы перечисления приведены в табл. 11.2.

Таблица 11.2. Значения перечисления FileAccess Значение Описание

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

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

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

Возможные режимы открытия файла определены в перечислении FileMode (табл. 11.3).

Таблица 11.3. Значения перечисления FileMode Значение Описание

Append Откр1ть файл, если он существует, и установить текущий указатель

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

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

же именем, он будет стерт

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

же именем, возникает исключение lOException

Open Откр1ть существующий файл

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

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

обрезан до нулевой длины

Режим FileMode.Append можно использовать только совместно с доступом типа FileAccess.Write, то есть для файлов, открываемых для записи.

Режимы совместного использования файла различными пользователями определяет перечисление FileShare (табл. 11.4).



Таблица 11.4. Значения перечисления FileShare

Значение Описание

None

Read

ReadWrite

Wri te

Совместное использование откр1того файла запрещено. Запрос на открытие данного файла завершается сообщением об ошибке

Позволяет откр1вать файл для чтения одновременно нескольким пользователям. Если этот флаг не установлен, запросы на открытие файла для чтения завершаются сообщением об ошибке

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

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

Потоки байтов

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

Таблица 11.5.

Элемент

BeginRead, BeginWrite

CanRead, CanSeek, CanWrite

СЛ ose

EndRead, EndWrite

Flush

Length

Position

Read,

ReadByte

Seek

SetLength

Wri te,

WriteByte

Элементы класса Stream Описание

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

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

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

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

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

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

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

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

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

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

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



Класс FileStream реализует эти элементы для работы с дисковыми файлами. Для определения режимов работы с файлом используются стандартные перечисления FileMode, FileAccess и FileShare. Значения этих перечислений приведены в табл. 11.2-11.4. В листинге 11.1 представлен пример работы с файлом. В призере демонстрируются чтение и запись одного байта и массива байтов, а также позиционирование в потоке.

Листинг 11.1. Пример использования потока байтов

using System;

using System.10;

namespace ConsoleApplication1

{ class Classl

static void MainO

FileStream f = new FileStream( test.txt , FileMode.Create, FileAccess.ReadWrite ) ;

f.WriteByte( 100 ) ;

II ъ начало файла записывается число 100

byte[] х = new byte[10];

for ( byte i = 0; i < 10; ++i )

x[1] = (byteM 10 - i );

f.WriteByte(i) ;

записывается 10 чисел от 0 до 9

f.WriteC x, 0, 5 ); byte[] у = new byte[20];

записывается 5 элементов массива

f.Seek( 0, SeekOrigin.Begin ); текущий указатель - на начало f.Read( у,. 0. 20 ); чтение из файла в массив

foreach С byte elem in у ) Consolе.WriteC Console.WriteLineC);

+ elem );

f.Seek(5, SeekOrigin.Begin); текущий указатель - на 5-й элемент int а = f.ReadByteO; чтение 5-го элемента

Console.WriteLineC а ) ;

а = f.ReadByteO; чтение 6-го элемента

Console.WriteLineC а );

Console.WriteLineC Текущая позиция в потоке + f.Position ); f.CloseO;



1 ... 79 80 81 [ 82 ] 83 84 85 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика