StringReader

Как можно видеть из таблицы, выполнять обмен с внешними устройствами мож­но на уровне:

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

байтов (FiIeStream);

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

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

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

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

Прямой доступ в сочетании с отсутствием преобразований обеспечивает высо­кую скорость получения нужной информации.

ПРИМЕЧАНИЕ

Методы форматированного ввода, с помощью которых можно выполнять ввод с кла­виатуры или из текстового файла значений арифметических типов, в С# не под­держиваются. Для преобразования из символьного в числовое представление используются методы класса Convert или метод Parse, рассмотренные в разделе «Простейший ввод-вывод» (см. с. 59).

ПРИМЕЧАНИЕ

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

Помимо перечисленных классов в библиотеке.NET есть классы XmlTextReader и XmlTextWriter, предназначенные для формирования и чтения кода в формате XML. Понятие об XML дается в главе 15.

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

будет стерт

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

возникает исключение IOException

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

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

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

нулевой длины

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: