Вход/Регистрация
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
вернуться

Троелсен Эндрю

Шрифт:

В следующем примере в новый файл *.dat записывается целый ряд типов данных,

static void Main(string[] args) {

 // Открытие сеанса двоичной записи в файл.

 FileInfo f = new FileInfo("BinFile.dat");

 BinaryWriter bw = new BinaryWriter(f.OpenWrite);

 // Печать информации о типе BaseStream.

 // (в данном случае это System.IO.FileStream) .

 Console.WriteLine("Базовый поток: {0}", bv.BaseStream);

 // Создание порции данных для сохранения в файле.

 double aDouble = 1234.67;

 int anInt = 34567;

 char[] aCharArray = { 'A', 'В', 'С'};

 // Запись данных.

 bw.Write(aDouble);

 bw.Write(anInt);

 bw.Write(aCharArray);

 bw.Close;

}

Обратите внимание на то, что объект FileStream, возвращенный из FileInfo.OpenWrite, передается конструктору типа BinaryWriter. С помощью такого подхода очень просто выполнить "расслоение" потока перед записью данных. Следует осознавать, что конструктор BinaryWriter способен принять любой тип, производный от Stream (например, FileStream, MemoryStream или BufferedStream). Поэтому, если нужно записать двоичные данные, например, в память, просто укажите подходящий объект MemoryStream.

Для чтения данных из файла BinFile.dat тип BinaryReader предлагает множество опций. Ниже мы используем PeekChar, чтобы выяснить, имеет ли поток еще данные, и в том случае, когда он их имеет, использовать ReadByte для получения значения. Обратите внимание на то, что байты форматируются в шестнадцатиричном виде и между ними вставляются семь пробелов.

static void Main(string[] args) {

 // Открытие сеанса двоичной записи в файл.

 FileInfo f = new FileInfo("BinFile.dat");

 …

 // Чтение данных в виде "сырых" байтов.

 BinaryReader br = new BinaryReader(f.OpenRead);

 int temp = 0;

 while (br.PeekChar != -1) {

Console.Write("{0,7:x}", br.ReadByte);

if (++temp == 4) {

// Запись каждых 4 байтов в виде новой строки.

Console.WriteLine;

temp = 0;

}

 Console.WriteLine;

 }

}

Исходный код. Проект BinaryWriterReader размещен в подкаталоге, соответствующем главе 16.

Вывод этой программы показан на рис. 16.9.

Рис. 16.9. Чтение байтов из двоичного файла

Программный мониторинг файлов

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

publiс enum System.IO.NotifyFilters {

 Attributes, СreationTime,

 DirectoryName, FileName,

 LastAccess, LastWrite,

 Security, Size,

}

Первым делом для работы с типом FileSystemWatcher нужно установить свойство Path, с помощью которого можно указать имя (и место размещения) каталога, содержащего контролируемые файлы, и свойство Filter, с помощью которого определяются расширения контролируемых файлов.

После этого можно указать обработку событий Сhanged, Created и Deleted, которые работают в совокупности с делегатом FileSystemEventHandler. Этот делегат может вызывать любой метод, соответствующий следующему шаблону.

// Делегат FileSystemEventHandler должен указывать на методы,

// имеющие следующую сигнатуру.

void MyNotifacationiHandler(object source, FileSystemEventArgs e)

  • Читать дальше
  • 1
  • ...
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: