Какой фильтр FileSystemWatcher мне нужно использовать для поиска новых файлов
До сих пор я знаю, что FileSystemWatcher может заглядывать в папку и если какой-либо из файлов внутри этой папки изменен, изменяет .etc... тогда мы сможем справиться с этим.
Но я не уверен, какой фильтр и событие я должен использовать в своем сценарии: "Наблюдайте за папкой". Если файл добавлен в эту папку, сделайте XYZ... Так что в моем сценарии меня не волнует, изменился ли существующий файл, и т.д. это следует игнорировать... только делать XYZ тогда и только тогда, когда новый файл был добавлен в эту папку...
Какое событие и фильтр вы рекомендовали для этого сценария?
Ответы
Ответ 1
Настройте наблюдателя:
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);
}
Ответ 2
Пожалуйста, посмотрите здесь подробное объяснение FileSystemWatcher: http://www.c-sharpcorner.com/uploadfile/mokhtarb2005/fswatchermb12052005063103am/fswatchermb.aspx
Вам нужно будет искать созданные файлы, если вы хотите искать добавленные файлы.
Вы указываете тип изменения для просмотра, устанавливая значение перечисления WatcherChangeType. Возможные значения:
- Все: создание, удаление, изменение или переименование файла или папки.
- Изменено: изменение файла или папки. Типы изменений включают в себя: изменения размера, атрибутов, параметров безопасности, последней записи и последнего времени доступа.
- Создано: создание файла или папки.
- Удалено: удаление файла или папки.
- Переименовано: переименование файла или папки.
Также вы можете просто подключить обработчик событий, который запускается, если файл создан (добавлен) и не реализует все остальные события, так как они вам не интересны:
watcher.Created += new FileSystemEventHandler(OnChanged);
Ответ 3
Код с комментариями ниже, возможно, удовлетворит ваши потребности.
public void CallingMethod() {
using(FileSystemWatcher watcher = new FileSystemWatcher()) {
//It may be application folder or fully qualified folder location
watcher.Path = "Folder_Name";
// Watch for changes in LastAccess and LastWrite times, and
// the renaming of files or directories.
watcher.NotifyFilter = NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.FileName |
NotifyFilters.DirectoryName;
// Only watch text files.if you want to track other types then mentioned here
watcher.Filter = "*.txt";
// Add event handlers.for monitoring newly added files
watcher.Created += OnChanged;
// Begin watching.
watcher.EnableRaisingEvents = true;
}
}
// Define the event handlers.
private static void OnChanged(object source, FileSystemEventArgs e) {
// Specify what is done when a file is created with these properties below
// e.FullPath , e.ChangeType
}