Класс FileSystemWatcher — исключение каталогов

В настоящее время я пытаюсь исключить каталоги с классом FileSystemWatcher, хотя я использовал это:

FileWatcher.Filter = "C:\\$Recycle.Bin";

и

FileWatcher.Filter = "$Recycle.Bin";

Он компилируется нормально, но когда я пытаюсь это сделать, результаты не отображаются.

Если убрать фильтр, все файлы загружаются нормально, код ниже:

 static void Main(string[] args)
        {
            string DirPath = "C:\\";

            FileSystemWatcher FileWatcher = new FileSystemWatcher(DirPath);
            FileWatcher.IncludeSubdirectories = true;
            FileWatcher.Filter = "*.exe";
          // FileWatcher.Filter = "C:\\$Recycle.Bin";
          //  FileWatcher.Changed += new FileSystemEventHandler(FileWatcher_Changed);
            FileWatcher.Created += new FileSystemEventHandler(FileWatcher_Created);
          //  FileWatcher.Deleted += new FileSystemEventHandler(FileWatcher_Deleted);
          //  FileWatcher.Renamed += new RenamedEventHandler(FileWatcher_Renamed);
            FileWatcher.EnableRaisingEvents = true;

            Console.ReadKey();
        }

person Ken    schedule 19.05.2011    source источник
comment
Вы можете исключить файлы и каталоги из регистрации или запуска предупреждений, считываемых medium.com/@srivishnu.k90/   -  person srivishnu    schedule 18.03.2020


Ответы (2)


Вы, вероятно, не читали http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.filter.aspx. Вы не можете ничего исключить с помощью свойства Filter. Он включает только объекты, соответствующие фильтру.

Если вы хотите что-то исключить, делайте это в событиях, запускаемых FSW.

person Tomas Voracek    schedule 19.05.2011
comment
Сумасшедшие вещи, на самом деле у меня были, мне просто интересно, есть ли альтернативный корень, спасибо за вашу помощь! :) - person Ken; 20.05.2011

Определите, является ли файл каталогом в вашем обработчике событий, и ничего не делайте:

private void WatcherOnCreated(object sender, FileSystemEventArgs fileSystemEventArgs)
{
    if (File.GetAttributes(fileSystemEventArgs.FullPath).HasFlag(FileAttributes.Directory))
        return; //ignore directories, only process files

    //TODO: Your code handling files...
}
person Eternal21    schedule 10.07.2017