Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
файлы лекция (основная).pdf
Скачиваний:
31
Добавлен:
15.04.2015
Размер:
938.85 Кб
Скачать

2.2 Базовые классы для работы с файлами и потоками

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

2.2.1 Основные классы ввода и вывода

Как и все классы в С#, основные классы ввода и вывода произошли от класса Object (рис. 1).

BinaryReader

BinaryWriter

Object File

Directory

Path

Рисунок 1: Основные классы для работы с файлами и потоками

Рассмотрим кратко их назначение.

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

Класс Binary Writer служит в качестве низкоуровневого средства записи данных в потоки вывода.

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

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

Класс Path обеспечивает методы и свойства, с помощью которых программы могут работать с именами и полными путями каталогов.

2.2.2 Классы на базе FileSystemInfo

Рассмотренные в предыдущем разделе классы Directory и File содержат только

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

Классы Directorylnfo и Filelnfo, напротив, требуют создания экземпляров объектов, представляющих соответственно каталоги и файлы. Эти классы унаследованы от общего абстрактного базового класса Filesystemlnfo, который, в свою очередь, является производным от абстрактного базового класса MarshalByRefObject (рис. 2).

Object

MarshalByRef

Object

FileSystemInfo

DirectoryInfo

 

FileInfo

 

 

 

Рисунок 2: Классы на базе FileSystemInfo

Абстрактный базовый класс MarshalByRefObj ect обеспечивает возможность доступа к объектам через границы доменов приложений, что необходимо в тех случаях, когда приложения выполняют удаленную обработку данных.

2.2.3 Классы для работы с потоками

На базе класса System.I0.Stream создано несколько производных классов, специально предназначенных для работы с потоками ввода и вывода (рис. 3).

Класс System.IO.Stream служит базовым для других классов потокового ввода и вывода.

Класс FileStream, как это видно из его названия, предназначен для работы с файлами через потоки ввода и вывода. Он обеспечивает позиционирование внутри

Object

MarshalByRefObject

System.IO.Stream

FileStream

NetworkStream

CryptodStream

BufferedStream

MemoryStream

Рисунок 3: Классы для работы с потоками

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

С помощью класса CryptoStream можно организовать ввод и вывод данных в зашифрованном виде.

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

С помощью класса NetworkStream можно осуществлять удаленный ввод и вывод данных через сетевое соединение.

Класс BufferedStream обеспечивает буферизацию при работе с потоками ввода и вывода. Буферизация операций ввода и вывода в большинстве случаев значительно ускоряет работу приложений, так как при ее использовании сокращается количество обращений к системе для обмена данными с внешними устройствами.

2.2.4 Классы для работы с потоками текстовых символов

Специально для работы с потоками текстовых символов UNICODE в библиотеке классов Microsoft .NET Framework предусмотрены абстрактные классы System.IO.TextReader и System.IO.TextWriter. Первый из этих классов предназначен для потоков ввода, а второй — для потоков вывода (рис. 4).

С помощью класса StreamReader, базовым для которого является класс System.IO.TextReader, программа может читать отдельные байты входного потока символов.

Object

MarshalByRefObject

System.IO.TextReader

 

 

 

 

 

System.IO.TextWriter

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

StreamReader

 

 

 

 

 

StreamWriter

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

StringReader

 

 

 

 

 

StringWriter

 

 

 

Рисунок 4: Классы для работы с потоками текстовых символов

Аналогично класс StreamWriter, созданный на базе класса System.IO.TextWriter, позволяет писать байты символов в выходной поток.

Классы StringReader и StringWriter, созданные на базе классов System.IO.TextReader и System.IO.TextWriter, соответственно предназначены для чтения и записи текстовых строк string.