Программирование >>  Программирование с использованием ajax 

1 ... 252 253 254 [ 255 ] 256 257 258 ... 396


8. Добавьте обработчик событий Click для кнопки Browse. Код в этом обработчике событий открывает диалог Open File (Открытие файла), позволяя пользователю выбирать файл для мониторинга. Выполните двойной щелчок на кнопке Browse и введите следующий код:

private void cmdBrowse Click(object sender, EventArgs e) {

if (FileDialog.ShowDialog() != DialogResult.Cancel ) {

txtLocation.Text = FileDialog.FileName; cmdWatch.Enabled = true;

Метод ShowDielog () возвращает значение перечисления DialogResult, отражающее способ выхода пользователя из диалога File Open. (Пользователь может щелкнуть на кнопке ОК или Cancel (Отмена).) Необходимо удостовериться, что пользователь не щелкнул на кнопке Cancel, поэтому перед сохранением выбора пользователя в TextBox результат вызова метода сравнивается со значением перечисления DialogResult .Cancel. И, наконец, свойство Enabled кнопки Watch устанавливается в true, чтобы можно было отслеживать файл.

9. Выполните ту же процедуру с кнопкой Watch. Добавьте следующий код для запуска FileSystemWatcher:

private void cmdWatch Click(object sender, EventArgs e) {

watcher.Path =Path.GetDirectoryName(txtLocation.Text); watcher.Filter = Path.GetFileName(txtLocation.Text); watcher.NotifyFiiter = NotifyFiiters.LastWrite I

NotifyFiiters.FileName NotifyFiiters.Size; IblWatch.Text = Watching + txtLocation.Text;

Начать наблюдение.

watcher.EnableRaisingEvents = true;

10. Убедитесь, что каталог FileLogs существует, чтобы можно было записывать в него данные. Добавьте следующий код в конструктор Forml, который проверит существование каталога, и создаст его в случае его отсутствия:

public Forml()

Directorylnfo aDir = new Directorylnfo(@ C:\FileLogs ); if (laDir.Exists) aDir.Create 0;

11. Создайте каталрг по имени C:\TempWatch и файл в этом каталоге по имени temp.txt.

12. Запустите приложение. Если все пройдет успешно, щелкните на кнопке Browse (Обзор) и выберите файл С: \TempWatch\temp. txt.

13. Щелкните на кнопке Watch (Отслеживание) для начала отслеживания файла. Единственное изменение, которое вы увидите в вашем приложении - это элемент управления типа метки, показывающий наблюдаемый файл.



14. Используя Windows Explorer, перейдите в каталог С; \TempWatch. Откройте файл temp. txt в редакторе Notepad, добавьте некоторый текст к этому файлу и сохраните его.

15. Переименуйте файл.

16. Теперь можете проверить журнальный файл, чтобы увидеть в нем записи о проведенных изменениях. Перейдите к C:\FileLogs\Log.txt и откройте файл в редакторе Notepad. Вы должны увидеть описание изменений в выбранном для наблюдения файле (рис. 24.13).

Т Log Notepad

i tm Formal View Неф

File: C:\Tefnpwatch\tenip.txt Changed File: C:\Tempwatch\temp.txt Changed

File renamed from temp.txt to C:\Tempwatch\RenamedTextDOC.txt

Puc. 24.13. Содержимое файла Log. txt

Описание полученных результатов

Это приложение весьма просто, однако оно демонстрирует работу класса FiieSystemWatcher. Поэкспериментируйте со строкой, которую вы помещаете в текстовое поле txtLocation. Если вы укажете для каталога * . *, будут отслеживаться все изменения в каталоге.

Большая часть кода приложения касается настройки объекта FiieSystemWatcher для наблюдения за корректным местоположением:

watcher.Path =Path.GetDirectoryName(txtLocation.Text); watcher.Filter = Path.GetFileName(txtLocation.Text); watcher.NotifyFilter = NotifyFilters.LastWrite

NotifyFilters.FileName NotifyFilters.Size; IblWatch.Text = Watching + txtLocation.Text;

Начать наблюдение.

watcher.EnableRaisingEvents = true;

Сначала код устанавливает путь к каталогу для мониторинга. Он использует новый объект, который вы еще не видели, а именно - System. 10. Path. Это статический класс, во многом подобный статическому объекту File, который предоставляет множество статических методов для манипулирования и извлекает информацию из строк, указывающих местоположение файлов. Сначала он применяется для извлечения имени каталога, которое пользователь ввел в текстовое поле, с помощью метода GetDirectoryName().

Следующая строка устанавливает фильтр на объекте. Это может быть действительный файл - в этом случае будет отслеживаться только этот файл. Или же это может быть нечто вроде * . txt, и тогда будут отслеживаться все файлы . txt в указанном каталоге. Опять-таки, для извлечения информации из указанного местоположения файла применяется статический объект Path.

NotifyFilter - это комбинация значений перечисления NotifyFilters, которые специфицируют, из чего именно состоит изменение. В данном примере указано, что если изменяется временная метка последней операции записи, имя или размер файла, приложение получит извещение об изменении. После обновления пользовательского интерфейса свойство EnableRaisingEvents устанавливается в true для запуска мониторинга.



Однако перед этим потребуется создать объект и установить обработчики событий:

this.watcher = new System.10.FileSystemWatcher() ;

this.watcher.Deleted += new System.10.FileSystemEventHandler(this.OnDelete) ; this.watcher.Renamed += new System.10.RenamedEventHandler(this.OnRenamed); this.watcher.Changed += new System.10.FileSystemEventHandler(this.OnChanged) ; this.watcher.Created += new System.10.FileSystemEventHandler(this.OnCreate) ;

Подобным образом обработчики событий для наблюдаемого объекта привязываются к созданным приватным методам. Здесь получаются обработчики для событий, связанных с наблюдаемым объектом, когда файл удаляется, переименовывается, изменяется или создается. В ваших собственных методах вы сами решаете, как обрабатывать эти события. Обратите внимание, что вы получаете уведомление после возникновения события.

В настоящих методах обработки событий вы просто записываете сообщение о событии в журнальный файл. Очевидно, можно запрограммировать и более изощренную реакцию на событие, в зависимости от конкретного приложения. Когда в каталог добавляется файл, вы можете переместить его куда-то еще или прочитать содержимое и запустить новый процесс на основе прочитанной информации. Возможности практически безграничны!

Резюме

В этой главе вы узнали о потоках и о том, почему они используются в .NET Framework для доступа к файлам и другим последовательным устройствам. Вы познакомились с базовыми классами в пространстве имен System. 10, включая следующие:

□ File

□ Filelnfo

□ FileStream

Вы видели, что класс File предлагает множество методов для перемещения, копирования и удаления файлов, а Filelnfo представляет физический файл на диске и предоставляет методы манипулирования этим файлом. Объект FileStream представляет файл, куда может быть выполнена запись, который может быть прочитан, либо то и другое. Вы также ознакомились с классами StreamReader и StreamWriter и увидели, насколько они полезны для записи потоков, а также научились читать и писать файлы произвольного доступа с использованием класса FileStream.

Основываясь на полученных знаниях, вы использовали классы из пространства имен System. 10.Compression для сжатия потоков при записи их на диск, а также изучили сериализацию объектов в файлы. И, наконец, вы построили целое приложение для слежения за файлами и каталогами, используя для этого класс FileSystemWatcher.

В этой главе рассмотрены следующие вопросы.

□ Как открывать файл, читать из него и писать в файл.

□ Разница между классами StreamWriter и StreamReader, с одной стороны, и классом FileStream - с другой.

□ Как работать с файлами с разделителями для заполнения структур данных.

□ Сжимающие и распаковывающие потоки.

□ Как сериализовать и десериализовать объекты.

□ Мониторинг файловой системы классом FileSystemWatcher.



1 ... 252 253 254 [ 255 ] 256 257 258 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика