Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Лабораторная работа № 6. Отслеживание изменений файловой системы и аппаратных измененийСодержание книги
Поиск на нашем сайте Цель работы: отслеживание событий изменения файловой системы; отслеживание событий изменения аппаратной конфигурации компьютера. Отслеживание изменений файловой системы Описание класса FileSystemWatcher Для отслеживания изменений в заданном каталоге можно воспользоваться классом FileSystemWatcher из пространства имен System.IO. Данный класс предназначен для отслеживания изменений в файловой системе. Изменения можно отслеживать как на локальном компьютере, так и на удаленном. ОС Windows уведомляет компонент об изменениях файлов в буфере, созданном объектом FileSystemWatcher. Если в течение короткого времени происходит много изменений, буфер может переполниться. В результате этот компонент не сможет отслеживать изменения в каталоге и будет давать только общие уведомления. Увеличение размера буфера с использованием свойства InternalBufferSize сопряжено с большими накладными расходами, поскольку он формируется не в выгружаемой памяти и не может быть подкачан с диска. Поэтому буфер следует делать как можно меньше, в то же время он должен быть достаточно большим, чтобы не пропустить какие-либо события, связанные с изменениями файлов. Чтобы устранить переполнение буфера, необходимо использовать свойства NotifyFilter и IncludeSubdirectories для фильтрации ненужных уведомлений. В таблице 6.1 перечислены основные свойства класса FileSystemWatcher. В таблице 6.2 перечислены основные события класса FileSystemWatcher.
Таблица 6. 1 – Основные свойства класса FileSystemWatcher
Продолжение таблицы 6.1
Таблица 6. 2 – Основные события класса FileSystemWatcher
Примеры работы с классом FileSystemWatcher приведены в подразделе 6.1.2.
Приложение для отслеживания изменений файловой системы В качестве примера рассмотрим приложение, изображенное на рисунке 5. В таблице 6.3 приведено описание используемых в приложении элементов управления.
Таблица 6. 3 – Элементы управления приложения для отслеживания изменений файловой системы
Продолжение таблицы 6.3
Последовательность программирования приложения: 1. Для работы с журналами событий необходимо подключить пространства имен System.Diagnostics и System.IO: using System.IO; using System.Diagnostics; 2. Объявление глобальных переменных: // имя каталога для аудита файловой системы public string dirname; // создание объекта watcher для отслеживания //изменений файловой системы public FileSystemWatcher watcher; //создание объекта elog для работы с журналом //аудита фаловой системы public EventLog elog;
Рисунок 5 – Окно приложения для отслеживания изменений файловой системы
3. Для события Click кнопки button1 (Выбор каталога) пишем следующий программный код: // --------------------------------------------- // выбор каталога для аудита файловой системы // --------------------------------------------- private void button1_Click(object sender, EventArgs e) { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) dirname = folderBrowserDialog1.SelectedPath; textBox1.Text = dirname; } 4. Для события Click кнопки button2 (Очистить поле вывода информации) пишем следующий программный код: // --------------------------------------------- // Очистить поле вывода информации // --------------------------------------------- private void button2_Click(object sender, EventArgs e) { richTextBox1.Clear(); richTextBox2.Clear(); } 16. В данной работе создается новый журнал аудита изменений файловой системы FileSystemAudit. Для перехвата событий записи в журнал FileSystemAudit необходимо создать свой обработчик. Данный обработчик событий имеет вид: // --------------------------------------------- // Перехват событий записи в журнал // --------------------------------------------- protected void OnEntryWritten(object sender, EntryWrittenEventArgs e) { richTextBox2.AppendText("Запись в журнал " + ((EventLog)sender).LogDisplayName + " Время " + e.Entry.TimeWritten + "Позиция " + e.Entry.Index + "\r\n"); } 5. Для отслеживания изменений файловой системы необходимо создать свои обработчики событий и добавить их к списку обработчиков событий, которые прикреплены к данному объекту (в данном случае файловой системе). События, отслеживаемые файловой системой, приведены в таблице 1.6. В данной работе с целью упрощения созданы два новых обработчика событий: OnChanged – отслеживает создание, удаление и изменение файлов и папок и OnRenamed – отслеживает переименование файлов и папок. Новые обработчики событий имеют вид: // --------------------------------------------- // Отслеживание создания, удаления и изменение // файлов и папок // --------------------------------------------- private void OnChanged(object source, FileSystemEventArgs e) { richTextBox1.AppendText(e.FullPath + " " + e.ChangeType + "\r\n"); // Запись в журнал FileSystemAudit elog.WriteEntry(e.FullPath + " " + e.ChangeType, EventLogEntryType.Information); } // --------------------------------------------- // Отслеживание переименований файлов и папок // --------------------------------------------- private void OnRenamed(object source, RenamedEventArgs e) { richTextBox1.AppendText(e.OldFullPath + " переименован в " + e.FullPath + "\r\n"); // Запись в журнал FileSystemAudit elog.WriteEntry(e.OldFullPath + " переименован в " + e.FullPath, EventLogEntryType.Information); } 6. Для события Click кнопки button3 (Начать мониторинг событий файловой системы) пишем следующий программный код: // --------------------------------------------- // Мониторинг событий файловой системы // --------------------------------------------- private void button3_Click(object sender, EventArgs e) { watcher = new FileSystemWatcher(); watcher.Path = dirname; // Установка фильтров watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; // Список файлов, за которыми ведется наблюдение watcher.Filter = ""; if (checkedListBox2.SelectedItem!= null) if (checkedListBox2.SelectedIndex == 4) watcher.Filter = "*.*"; else { if (checkedListBox2.SelectedIndex == 1) watcher.Filter = "*.txt;*.doc;*.rtf"; if (checkedListBox2.SelectedIndex == 2 && watcher.Filter.Length!= 0) watcher.Filter += ";*.exe"; if (checkedListBox2.SelectedIndex == 3 && watcher.Filter.Length!= 0) watcher.Filter += ";*.dll"; if (checkedListBox2.SelectedIndex == 2 && watcher.Filter.Length!= 0) watcher.Filter += ";*.bmp;gif"; } // Добавление обработчиков событий if (checkedListBox1.SelectedIndex == 4) { watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.Deleted += new FileSystemEventHandler(OnChanged); watcher.Renamed += new RenamedEventHandler(OnRenamed); } else { if (checkedListBox1.SelectedIndex == 0) watcher.Changed += new FileSystemEventHandler(OnChanged); if (checkedListBox1.SelectedIndex == 1) watcher.Created += new FileSystemEventHandler(OnChanged); if (checkedListBox1.SelectedIndex == 2) watcher.Deleted += new FileSystemEventHandler(OnChanged); if (checkedListBox1.SelectedIndex == 3) watcher.Renamed += new RenamedEventHandler(OnChanged); } watcher.EnableRaisingEvents = true; // Проверяем, существует ли журнал аудита файловой системы // Имя программы, связанной с журналом string eventSource = "ФайловаяСистема"; // Имя журнала string logName = "FileSystemAudit"; // Если программа еще не зарегистрирована, //то регистрируем ее if (!EventLog.SourceExists(eventSource)) { EventLog.CreateEventSource(eventSource, logName); } // Объект для работы с журналом elog = new EventLog(); elog.Log = logName; elog.Source = eventSource; elog.EntryWritten += new EntryWrittenEventHandler(OnEntryWritten); // Включаем наблюдение elog.EnableRaisingEvents = true; } 7. Для события Click кнопки button4 (Остановить мониторинг) пишем следующий программный код: // --------------------------------------------- // Остановить мониторинг событий файловой системы // --------------------------------------------- private void button4_Click(object sender, EventArgs e) { watcher.Changed -= OnChanged; watcher.Created -= OnChanged; watcher.Deleted -= OnChanged; watcher.Renamed -= OnRenamed; elog.Close(); elog = null; } 8. Для события Click кнопки button5 (Уничтожить журнал событий) пишем следующий программный код: // --------------------------------------------- // Уничтожение журнала FileSystemAudit // --------------------------------------------- private void button5_Click(object sender, EventArgs e) { // Имя программы, связанной с журналом string eventSource = "ФайловаяСистема"; // Имя журнала string logName = "FileSystemAudit"; // Удаляем регистрацию программы if (EventLog.SourceExists(eventSource)) { EventLog.DeleteEventSource(eventSource); } // Удаляем журнал if (EventLog.Exists(logName)) { EventLog.Delete(logName); } richTextBox1.Clear(); richTextBox2.Clear(); }
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2021-12-07; просмотров: 142; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.41 (0.006 с.) |