Шрифт:
Точно так же событие Renamed можно обработать с помощью типа делегата RenamedEventHandler, способного вызывать методы, соответствующие следующему шаблону.
Для иллюстрации процесса мониторинга файлов предположим, что мы создали на диске C новый каталог с именем MyFolder, cодержащий различные файлы *.txt (назовите их так, как пожелаете). Следующее консольное приложение осуществляет мониторинг файлов *.txt а каталоге MyFоlder и выводит сообщения о событиях, соответствующих созданию, удалению, изменению или переименованию файлов.
Следующие два обработчика событий просто выводят информацию о модификации текущего файла.
Чтобы проверить работу этой программы, запустите приложение и откройте Проводник Windows. Попытайтесь переименовать, создать, удалить файлы *.txt в MyFolder или выполнить с ними какие-то другие действия, вы увидите, что консольное приложение реагирует на эти действия выводом различной информации о состоянии текстовых файлов (рис. 16.10).
Исходный код. Проект MyDirectoryWatcher размещен в подкаталоге, соответствующем главе 16.
Рис. 16.10. Наблюдение за текстовыми файлами
Асинхронный файловый ввод-вывод
В завершение нашего обзора пространства имен System.IO давайте выясним, как осуществляется асинхронное взаимодействие с типами FileStream. Один из вариантов поддержки асинхронного взаимодействия в .NET вы уже видели при рассмотрении многопоточных приложений (см. главу 14). Ввиду того, что ввод-вывод может занимать много времени, все типы, производные от System.IO.Stream, наследуют множество методов, разрешающих асинхронную обработку данных. Как и следует ожидать, эти методы работают в связке с типом IAsyncResult.