检测打开文件(使用c#)

时间:2014-03-18 14:11:47

标签: c# filesystems file-monitoring

大家好,很抱歉,如果我重复问题(我的英语很糟糕)。 有没有办法在用户打开文件时收到通知?类似于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#可以简单地处理我的请求。

2 个答案:

答案 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挂钩!

您想要监控文件夹或整个磁盘中的一小组文件吗?