Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Программный мониторинг файлов
Программный мониторинг файлов
Теперь, когда вы уже знаете возможности различных средств чтения и записи давайте, рассмотрим роль класса 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)
Точно так же событие Renamed можно обработать с помощью типа делегата RenamedEventHandler, способного вызывать методы, соответствующие следующему шаблону.
// Делегат RenamedEventHandler должен указывать на методы,
// имеющие следующую сигнатуру.
void MyNotificationHandler(object source, RenamedEventArgs e)
Для иллюстрации процесса мониторинга файлов предположим, что мы создали на диске C новый каталог с именем MyFolder, cодержащий различные файлы *.txt (назовите их так, как пожелаете). Следующее консольное приложение осуществляет мониторинг файлов *.txt а каталоге MyFоlder и выводит сообщения о событиях, соответствующих созданию, удалению, изменению или переименованию файлов.
static void Main(string[] args) {
Console.WriteLine("***** Чудесный монитор файлов *****n");
// Установка пути для каталога наблюдения.
FileSystemWatcher watcher = new FileSystemWatcher();
try {
watcher.Path = @"C:MyFolder";
} catch(ArgumentException ex) {
Console.WriteLine(ex.Message);
return;
}
// Установка фильтров наблюдения.
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Наблюдение только за текстовыми файлами.
watcher.Filter = "*.txt";
// Добавление обработчиков событий.
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);
// Начало наблюдения за каталогом.
watcher.EnableRaisingEvents = true;
// Ожидание сигнала пользователя для выхода из программы.
Console.WriteLine(@"Нажмите 'q' для выхода из приложения.");
while(Console.Read() != 'q');
}
Следующие два обработчика событий просто выводят информацию о модификации текущего файла.
static void OnChanged(object source, FileSystemEventArgs e) {
// Уведомление об изменении, создании или удалении файла.
Console.WriteLine("Файл {0} {1}!", e.FullPath, e.ChangeType);
}
static void OnRenamed(object source, RenamedEventArgs e) {
// Уведомление о переименовании файла.
Console.WriteLine("Файл {0} переименован вn{1}",
e.OldFullPath, e.FullPath);
}
Чтобы проверить работу этой программы, запустите приложение и откройте Проводник Windows. Попытайтесь переименовать, создать, удалить файлы *.txt в MyFolder или выполнить с ними какие-то другие действия, вы увидите, что консольное приложение реагирует на эти действия выводом различной информации о состоянии текстовых файлов (рис. 16.10).
Исходный код. Проект MyDirectoryWatcher размещен в подкаталоге, соответствующем главе 16.
Рис. 16.10. Наблюдение за текстовыми файлами
- Анализ пространства имен System.IO
- Типы Directory(Info) и File(Info)
- Работа с типом DirectoryInfo
- Работа с типом Directory
- Работа с типом класса DriveInfo
- Работа с классом FileInfo
- Работа с типом File
- Абстрактный класс Stream
- Работа с StreamWriter и StreamReader
- Работа с типами StringWriter и StringReader
- Работа с BinaryWriter и BinaryReader
- Программный мониторинг файлов
- Асинхронный файловый ввод-вывод
- Резюме
- Информационно-мониторинговая система «Web-Observer»
- Резервное копирование многофайловых баз данных
- Восстановление из резервных копий многофайловых баз данных
- Создание файлов с блокировкой
- Мониторинг состояния сервера
- Рекомендуемое расширение для файлов баз данных - *.ib
- Средства мониторинга
- Создание многофайловой базы данных
- Правила именования файлов
- Глава 6 Файловые системы
- 3.4 Сетевая файловая система
- 6.4 Другие файловые системы