我目前正在尝试使用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();
}
答案 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...
}