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

检测打开的文件(使用c#),c#,filesystems,file-monitoring,C#,Filesystems,File Monitoring,大家好,如果我重复了这个问题(我的英语很差),我很抱歉。 当用户打开文件时,是否有任何方式可以得到通知?类似于FileSystemWatcher类,除了“Opened”事件? 我只想打开文件而不更改或重命名此文件。 例如,现在我检测到重命名文件,并希望检测到打开 private void hookEvents(String path, String password) { FileSystemWatcher fsw = new FileSystemWatcher();

大家好,如果我重复了这个问题(我的英语很差),我很抱歉。 当用户打开文件时,是否有任何方式可以得到通知?类似于FileSystemWatcher类,除了“Opened”事件? 我只想打开文件而不更改或重命名此文件。 例如,现在我检测到重命名文件,并希望检测到打开

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

另外,我听说了一些关于过滤器和驱动程序的内容,但我希望c#能为我的请求提供简单的方法。

System.IO.FileSystemWatcher是为监视文件更改而构建的。因为“打开文件”不会改变文件本身,所以它肯定不会工作

有几种可能的方法可以做到这一点

选项1

您可以通过WMI查询(如果您的操作系统基于windows)或通过打开文件进行写入来检测文件是否正在使用(文件正在使用时发生异常)

选项2


您可以尝试获取文件的句柄,并查看哪个进程拥有所有权。如果是,则该文件由其他人打开。检查这篇文章

System.IO.FileSystemWatcher是为监视文件更改而构建的。因为“打开文件”不会改变文件本身,所以它肯定不会工作

有几种可能的方法可以做到这一点

选项1

您可以通过WMI查询(如果您的操作系统基于windows)或通过打开文件进行写入来检测文件是否正在使用(文件正在使用时发生异常)

选项2


您可以尝试获取文件的句柄,并查看哪个进程拥有所有权。如果是,则该文件由其他人打开。查看这篇文章

我认为没有一个简单的答案可以用C#实现

里面有一些信息,但都是相当低级的东西。。。文件系统过滤器驱动程序和API挂钩


你想监视文件夹中的一小部分文件还是整个磁盘?

我认为没有一个简单的答案可以用C实现

里面有一些信息,但都是相当低级的东西。。。文件系统过滤器驱动程序和API挂钩


您想监视文件夹中的一小部分文件还是整个磁盘?

我认为您可以使用opened最接近的方法是关闭修改日期,您需要实现Watcher类的NotifyFilter属性。请看这里,我认为最接近opened的方法是关闭修改日期,您需要实现Watcher类的NotifyFilter属性。请看这里我需要一个特定文件的简单监视器,它会在我尝试打开文件时询问密码(我阅读了有关acl的内容,希望我不会在拒绝访问时遇到任何问题),所以如果他们输入了错误的密码,您想停止文件打开吗?文件类型是什么?如果它是由您尚未编写的应用程序打开的,那么如何阻止它在注册的应用程序中打开?我认为可以这样做:输入文件的全名和密码后,我会执行“FileSystemRights.ReadData,AccessControlType.Deny”。当我尝试打开此文件(例如使用记事本)时,我的应用程序将显示“密码”对话框,如果密码为true,我将再次更改acl,下次尝试打开文件将成功。P.S.对不起,我的英语太难了。我需要一个简单的监视器来监视特定的文件,当我尝试打开文件时,它会询问密码(我阅读了有关acl的内容,希望我不会在拒绝访问时遇到任何问题),所以如果他们输入了错误的密码,你想停止打开文件吗?文件类型是什么?如果它是由您尚未编写的应用程序打开的,那么如何阻止它在注册的应用程序中打开?我认为可以这样做:输入文件的全名和密码后,我会执行“FileSystemRights.ReadData,AccessControlType.Deny”。当我尝试打开此文件(例如使用记事本)时,我的应用程序将显示“密码”对话框,如果密码为true,我将再次更改acl,下次尝试打开文件将成功。顺便说一句,很抱歉我的英语太难了。。。我认为第一种方法对我的大脑是可能的。一个问题:异常何时发生?当文件在某些程序中打开时,我尝试在我的应用程序中打开写入,或者如果我第一次在我的应用程序中打开文件,然后尝试打开(以记事本为例),我也会捕获异常?嗯。。。我认为第一种方法对我的大脑是可能的。一个问题:异常何时发生?当文件在某些程序中打开时,我尝试在我的应用程序中打开写入,或者如果我第一次在我的应用程序中打开文件,然后尝试打开(例如使用记事本),我也会捕获异常?