Фильтр FileSystemWatcher изменил события - PullRequest
0 голосов
/ 22 ноября 2011

Я пишу на C # и использую в FileSystemWatcher для мониторинга каталога папок (папки можно создавать и переименовывать).Я успешно обрабатываю события Created и Renamed.

Содержимое этих папок может постоянно меняться.Но единственное изменение, о котором мне нужно знать, - это когда в папку добавляется новый HTML-файл.

Как отфильтровать все события изменения, кроме нового файла [HTML]?

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

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

var folder = @"c:\";    
FileSystemWatcher watcher = newFileSystemWatcher(folder, "*.html");

Тогда, если вы хотите получать уведомления только при создании этих файлов:

watcher.Created += new FileSystemEventHandler(watcher_FileCreated);

void watcher_FileCreated(object sender, FileSystemEventArgs e)
{
// do something interesting
}
0 голосов
/ 23 ноября 2011

Просто подпишитесь на событие Change и отфильтруйте соответствующим образом с вашим существующим FSW.Если вы сможете создать еще одну FSW, то ответа Пола Кирни будет достаточно, и, вероятно, он станет намного чище.

string[] desiredExtensions = new [] { ".html", ... };
string desiredExtension = ".html";


watcher.Changed += watcher_Changed;

...

private void watcher_Changed(object sender, FileSystemEventArgs e)
{
   // single
   if (string.Equals(Path.GetExtension(e.FullPath), desiredExtension, StringComparison.CurrentCultureIgnoreCase))
   { ... }

   // several
   if (desiredExtensions.Any(ext => string.Equals(Path.GetExtension(e.FullPath), ext, StringComparison.CurrentCultureIgnoreCase)))
   { ... }
}
0 голосов
/ 22 ноября 2011

FileSystemEventArgs содержит свойство с именем Name, которое поможет вам фильтровать.

http://msdn.microsoft.com/en-us/library/system.io.filesystemeventargs.aspx

Быстрый образец:

static void Main(string[] args)
{
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = @"C:\";
        watcher.EnableRaisingEvents = true;
        watcher.Created += new FileSystemEventHandler((o,s) => {
        if (s.Name.ToLower().EndsWith(".html") || s.Name.ToLower().EndsWith(".htm"))
             Console.WriteLine("HTML is here");
        });

        Console.ReadLine();
 }

Обратите внимание, что вы можете передать конструктору "* .html", но вы не будете захватывать файлы, заканчивающиеся на файлы .htm, которые считаются действительными Но я не уверен, соответствует ли это вашему варианту использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...