Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы C#.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
609 Кб
Скачать
☆

Основы c#. Урок 59. Класс FileSystemWatcher

Класс FileSystemWatcher из пространства имен System.IO предназначен для отслеживания изменений в файловой системе. Изменения можно отслеживать как на локальном компьютере, так и на удаленном.

Вот пример использования этого класса.

// Подключем нужное пространство имен.

using System.IO;

class Class1

{

static void Main(string[] args)

{

// Будем следить за папкой "c:\tmp".

FileSystemWatcher watcher = new FileSystemWatcher(@"c:\tmp");

// Следим за изменением имени файлов.

watcher.NotifyFilter = NotifyFilters.FileName;

// Добавляем обработчик для события переименования файла.

watcher.Renamed += new RenamedEventHandler(OnRenamed);

// Начинаем слежение.

watcher.EnableRaisingEvents = true;

// Следим, пока пользователь не нажал q.

Console.WriteLine("Press 'q' to exit");

while(Console.Read()!='q');

}

// Обработчик для события переименования файла.

private static void OnRenamed(object source, RenamedEventArgs e)

{

Console.WriteLine("{0} renamed to {1}", e.OldName, e.Name);

}

}

Как вы видите, схема действий тут такая - сначала мы указываем, за чем именно мы хотим следить (за какой папкой, за какими файлами и за какими событиями для этих файлов). Потом мы указываем, что за метод будет выполняться при наступлении того или иного события. Разумеется, этот метод должен быть в нашей программе, причем он должен иметь определенную сигнатуру.

Конкретно в нашем примере мы будем отслеживать переименование для всех файлов в папке "c:\tmp".

Основы c#. Урок 60. Перечисление NotifyFilters

Перечисление NotifyFilters служит для задания параметров, по которым происходит отслеживание изменений в файловой системе. Оно может принимать следующие значения:

  • Size - изменение размера файла или папки

  • CreationTime - изменение времени создания файла или папки

  • FileName - изменение имени файла

  • DirectoryName - изменение имени папки

  • Attributes - изменение атрибутов файла или папки

  • LastAccess - изменение времени последнего доступа к файлу или папке

  • LastWrite - изменение времени последней записи в файл или папку

  • Security - изменение в установках безопасности файла или папки

Пример использования:

FileSystemWatcher w = new FileSystemWatcher();

//Изменения в размере или в имени файла.

w.NotifyFilter = NotifyFilters.Size | NotifyFilters.FileName;

Основы c#. Урок 61. Перечисление WatcherChangeTypes

Перечисление WatcherChangeTypes предназначено для определения, какие изменения отслеживаются в файловой системе. Вот какие значения оно может принимать:

  • Changed - отслеживать изменения в атрибутах файла или папки (например, размер, время последней записи и др.)

  • Created - создание файла или папки

  • Deleted - удаление файла или папки

  • Renamed - переименование файла или папки

  • All - все из перечисленных

Основы c#. Урок 62. Класс FileSystemWatcher - пример использования

Вот пример использования класса FileSystemWatcher. В данном примере мы отслеживаем события переименования, удаления, создания и изменения размера файла.

using System;

using System.IO;

namespace SystemWatcher

{

class Class1

{

static void Main(string[] args)

{

FileSystemWatcher watcher = new FileSystemWatcher(@"c:\tmp");

// Следим за изменением имени и размера файлов.

watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.Size;

// Добавляем обработчики для событий.

watcher.Renamed += new RenamedEventHandler(OnRenamed);

watcher.Deleted += new FileSystemEventHandler(OnChanged);

watcher.Created += new FileSystemEventHandler(OnChanged);

watcher.Changed += new FileSystemEventHandler(OnChanged);

watcher.EnableRaisingEvents = true;

Console.WriteLine("Press 'q' to exit");

while (Console.Read() != 'q') ;

}

// Обработчик для события переименования файла.

private static void OnRenamed(object source, RenamedEventArgs e)

{

Console.WriteLine("{0} renamed to {1}", e.OldName, e.Name);

}

// Обработчик для остальных события файла.

private static void OnChanged(object source, FileSystemEventArgs e)

{

switch (e.ChangeType)

{

case WatcherChangeTypes.Deleted:

Console.WriteLine("{0} - deleted", e.Name);

break;

case WatcherChangeTypes.Created:

Console.WriteLine("{0} - created", e.Name);

break;

case WatcherChangeTypes.Changed:

Console.WriteLine("{0} - changed", e.Name);

break;

}

}

}

}

Обратите внимание, что для обработчика события Changed мы установили фильтр:

...

watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.Size;

...

Т. е. мы, например, не отслеживаем в данном примере время последнего доступа к файлу или изменения атрибутов файла.

Также обратите внимание, что мы используем один обработчик для 3-х событий - Deleted, Created и Changed.