Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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
        }