Создание Windows-приложений на основе Visual C#

         

Чтение и запись двоичных файлов


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

Рассмотрим приложение, позволяющее считывать файл формата MP3 и записывать фрагмент этого файла. Создайте новое консольное приложение и назовите его BinaryReadWrite. В папку bin/Debug поместите любой музыкальный файл формата MP3, имеющийся на вашем компьютере.

Подключаем пространство имен:

using System.IO;

Добавляем код:

Листинг 2.17.

(html, txt)

Запускаем приложение. Если все сработает без ошибок — на экране появится станадртное сообщение Press any key to continue, в противном случае — поскольку мы включили блок исключений — выйдет диагностическое сообщение. Перейдем в папку bin/Debug. В ней появился файл newmusic.mp3, прослушать который мы можем с помощью любого музыкального проигрывателя.

Рассмотрим перечисления в конструкторах FileStream. Параметр FileMode определяет, каким образом открывается файл (рис. 2.36):


Рис. 2.36.  Перечисления FileMode

Значения перечисления FileMode указаны в таблице 2.4.

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

ЗначениеОписание
AppendЕсли файл существует, он открывается, если нет — создается новый. Данные добавляются в конец файла
CreateСоздается новый выходной файл; если файл с таким названием существует, он перезаписывается
CreateNewСоздается новый выходной файл; если файл с таким названием уже существует, генерируется исключение IOException
OpenОткрывается существующий файл; если файла с таким названием не существует, генерируется исключение FileNotFoundException
OpenOrCreateОткрывается существующий файл; если файл не существует, он создается
TruncateОткрывается существующий файл, но его длина усекается до нуля


Параметр FileAccess определяет для пользователя разрешение на доступ к файлу (рис. 2.37):


увеличить изображение
Рис. 2.37.  Перечисления FileAccess

Значения перечисления FileAccess указаны в таблице 2.5.



Таблица 2.5. Значение перечисления FileAccessЗначениеОписание
ReadДоступ на чтение из файла
ReadWriteРазрешается чтение из файла и запись данных в файл
WriteДоступ для записи в файл


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

FileStream Chtenie = new FileStream("music.mp3", FileMode.Open, FileAccess.Read, FileShare.Read);


увеличить изображение
Рис. 2.38.  Перечисления FileShare

Значения перечисления FileShare указаны в таблице 2.6.



Таблица 2.6. Значение перечисления FileShareЗначениеОписание
InheritableДает доступ к файлам, образованных текущем потоком
NoneЗапрещает совместное использование текущего файла. Пока файл открыт, доступ к нему будет блокирован
ReadПозволяет открывать текущей файл для чтения
ReadWriteПозоволяет открывать текущий файл для чтения или записи
WriteПозволяет открывать текущий файл для записи


На диске, прилагаемом к книге, вы найдете приложение BinaryReadWrite (Code\Glava2\ BinaryReadWrite).




увеличить изображение
Рис. 2.38.  Перечисления FileShare

Значения перечисления FileShare указаны в таблице 2.6.



Таблица 2.6. Значение перечисления FileShareЗначениеОписание
InheritableДает доступ к файлам, образованных текущем потоком
None Запрещает совместное использование текущего файла. Пока файл открыт, доступ к нему будет блокирован
ReadПозволяет открывать текущей файл для чтения
ReadWriteПозоволяет открывать текущий файл для чтения или записи
WriteПозволяет открывать текущий файл для записи


На диске, прилагаемом к книге, вы найдете приложение BinaryReadWrite (Code\Glava2\ BinaryReadWrite).


Содержание раздела