Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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; просмотров: 67; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.42.168 (0.043 с.) |