C#文件/文件夹监视器
我已经通过FileSystemWatcher看到了文件和文件夹的更改 我的问题是我无法区分文件和文件夹。文件和文件夹可能具有相同的路径名 对于delete事件,我甚至不能对测试文件.Exists(path)或Directory.Exists(path)使用dirty workaround,因为调用该方法时文件/文件夹已被删除 可能此对象包含我需要的信息,但我没有找到它:C#文件/文件夹监视器,c#,monitor,filesystemwatcher,C#,Monitor,Filesystemwatcher,我已经通过FileSystemWatcher看到了文件和文件夹的更改 我的问题是我无法区分文件和文件夹。文件和文件夹可能具有相同的路径名 对于delete事件,我甚至不能对测试文件.Exists(path)或Directory.Exists(path)使用dirty workaround,因为调用该方法时文件/文件夹已被删除 可能此对象包含我需要的信息,但我没有找到它: FileSystemEventArgs e 我只想知道更改的项目是文件还是文件夹。您可以测试它是否有目录: 当然,如果它已经
FileSystemEventArgs e
我只想知道更改的项目是文件还是文件夹。您可以测试它是否有目录:
当然,如果它已经被删除,这将不起作用,并且您将无法识别类型。除非您有一个路径->类型映射列表,然后才能在其中查找删除项目的最后一种类型,否则无法检索已删除项目的类型。假设它位于NTFS卷上,我认为您可以通过看着这张照片。特别是控制代码,并查看的,以查看它是否是
文件\属性\目录
这里可以找到一个示例(C++中,但可能转换成C语言,或者可能只是编写一个小的C++ DLL来调用你的应用程序):< P>我找到了一个干净的,总是工作的解决方案: 监视程序的标准设置用于文件和文件夹。这在我看来毫无意义,因为我无法找出更改对象的类型 可以创建两个FileWatcher。一个用于文件,一个用于文件夹。然后,您只需更改默认设置,如下所示:
// for file
fileSysWatchFile.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
// for folder
fileSysWatchDir.NotifyFilter = NotifyFilters.DirectoryName | NotifyFilters.LastWrite;
你确定在OP突出显示文件/目录被删除的情况下,这会起作用吗?是的,我也是这么说的。啊,对不起。我想我们是在同一时间发布的。???。。。因此,如果我有一个file=C:\name和一个folder=C:\name,我就无法找出是哪一个被更改了?你不能在同一个文件夹中有一个同名的文件和目录。无论如何,如果它已经被删除,你甚至无法找出它是一个文件还是一个目录唯一的问题是FSW使用了线程池,因此,如果您使用多个观察者,那么您将处理的事件顺序可能无法反映现实。到目前为止,我找到的唯一解决方案是使用ho1提到的变更日志,或者使用and编写自己的文件系统监视程序。只是把它扔给将来会遇到这个问题的人。
// for file
fileSysWatchFile.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
// for folder
fileSysWatchDir.NotifyFilter = NotifyFilters.DirectoryName | NotifyFilters.LastWrite;