FileSystemWatcher类 - 排除目录

时间:2011-05-19 22:00:32

标签: c# .net windows 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();
        }

2 个答案:

答案 0 :(得分:10)

您可能还没有看过http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.filter.aspx。您不能使用Filter属性排除任何内容。它只包含匹配过滤器的对象。

如果要排除某些内容,请在FSW触发的事件中执行此操作。

答案 1 :(得分:1)

确定文件是否是事件处理程序中的目录,然后不执行任何操作:

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...
}