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

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

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

Ответы на вопрос(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
        }

Пожалуйста, посмотрите здесь для подробного объяснения FileSystemWatcher:http://www.c-sharpcorner.com/uploadfile/mokhtarb2005/fswatchermb12052005063103am/fswatchermb.aspx

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

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

All: The creation, deletion, change, or renaming of a file or folder. Changed: The change of a file or folder. The types of changes include: changes to size, attributes, security settings, last write, and last access time. Created: The creation of a file or folder. Deleted: The deletion of a file or folder. Renamed: The renaming of a file or folder.

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

watcher.Created += new FileSystemEventHandler(OnChanged);
Решение Вопроса

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

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);
}
 28 февр. 2014 г., 03:06
@JeffBridgman Это не интуитивно понятно, но NotifyFilter служит способом точной настройки уведомлений, поступающих от FileSystemWatcher. По умолчанию для NotifyFilter задано значение DirectoryName | FileName | LastWrite. Это дает вам возможность выбрать те основные операции с файлами, которые вы ожидаете от FileSystemWatcher: созданные, измененные, удаленные и переименованные. Фильтр уведомлений можно изменить для увеличения спектра атрибутов файлов / каталогов, которые будут отслеживаться и использоваться в качестве входных данных для запуска различных событий. Хотя, как вы можете догадаться, большинство других фильтров приведут только к изменению & quot; событие.
 21 мая 2013 г., 21:33
Зачем нам устанавливатьNotifyFilter если мы заботимся только о том, чтобы файл создавался, а не изменялся?

Ваш ответ на вопрос