Какой фильтр FileSystemWatcher мне нужно использовать для поиска новых файлов

Пока я знаю, что FileSystemWatcher может заглядывать в папку, и если какой-либо из файлов внутри этой папки изменяется, модифицируется и т. Д., То мы можем справиться с этим. Но я не уверен, какой фильтр и событие мне следует использовать в моем сценарии: следить за папкой, если файл добавлен в эту папку, выполните XYZ ... Так что в моем сценарии мне все равно, будет ли изменен существующий файл и т. д. их следует игнорировать ... выполняйте XYZ только тогда и только тогда, когда в эту папку был добавлен новый файл ...

Какие событие и фильтр вы рекомендуете для этого сценария?


person Bohn    schedule 17.06.2012    source источник


Ответы (2)


Настройте наблюдатель:

FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = "Blah";

watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
    | NotifyFilters.FileName;

watcher.Created += new FileSystemEventHandler(OnChanged);

watcher.EnableRaisingEvents = true;

Затем реализуйте делегат FileCreated:

private void OnChanged(object source, FileSystemEventArgs e) {
    Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
}
person David Brabant    schedule 17.06.2012
comment
Зачем нам устанавливать NotifyFilter, если мы заботимся только о создаваемом файле, а не об изменении? - person Jeff B; 21.05.2013
comment
@JeffBridgman Это не интуитивно понятно, но NotifyFilter служит способом точной настройки уведомлений, поступающих из FileSystemWatcher. По умолчанию для NotifyFilter установлено значение DirectoryName | FileName | LastWrite. Это дает вам возможность отслеживать основные действия с файлами, которые вы ожидаете от FileSystemWatcher: создано, изменено, удалено и переименовано. Фильтр уведомлений можно изменить, чтобы увеличить спектр атрибутов файлов / каталогов, которые будут отслеживаться и использоваться в качестве входных данных для запуска различных событий. Хотя, как вы можете догадаться, большинство других фильтров приводят только к событию Changed. - person CobaltBlue; 28.02.2014

Здесь можно найти подробное описание FileSystemWatcher: http://www.c-sharpcorner.com/uploadfile/mokhtarb2005/fswatchermb12052005063103am/fswatchermb.aspx

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

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

  • Все: создание, удаление, изменение или переименование файла или папки.
  • Изменено: изменение файла или папки. Типы изменений включают: изменения размера, атрибутов, настроек безопасности, последней записи и времени последнего доступа.
  • Создано: создание файла или папки.
  • Удалено: удаление файла или папки.
  • Переименовано: переименование файла или папки.

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

watcher.Created += new FileSystemEventHandler(OnChanged);
person Jason De Oliveira    schedule 17.06.2012