大家好,很抱歉,如果我重复问题(我的英语很糟糕)。 有没有办法在用户打开文件时收到通知?类似于FileSystemWatcher类,除了“打开”事件? 我只想检测打开文件而不更改或重命名此文件。 例如,现在我检测到重命名文件,并希望检测开放
private void hookEvents(String path, String password)
{
FileSystemWatcher fsw = new FileSystemWatcher();
fsw.Path = Path.GetDirectoryName(path);
fsw.Filter = Path.GetFileName(path);
fsw.Renamed += new RenamedEventHandler(onRenamed);
fsw.EnableRaisingEvents = true;
}
P.S。我听说过有关过滤器和驱动程序的一些内容,但我希望c#可以简单地处理我的请求。
答案 0 :(得分:2)
System.IO.FileSystemWatcher用于监视文件更改。由于“打开文件”不会更改文件本身,因此无法确定。
有可能的方法来做到这一点
选项1
您可以通过WMI查询检测文件是否正在使用(如果您的操作系统是基于Windows的)或打开文件进行写入(文件正在使用时发生异常)。
选项2
您可以尝试获取文件的句柄,并查看哪个进程拥有所有权。如果是这样,该文件由其他人打开。查看此帖子Using C#, how does one figure out what process locked a file?
答案 1 :(得分:2)
我认为没有一个简单的答案可以在C#中实现。
this question中有一些信息,但它们都是相当低级的东西......文件系统过滤器驱动程序和API挂钩!
您想要监控文件夹或整个磁盘中的一小组文件吗?