C#跟踪复制的文件

本文关键字:文件 复制 跟踪 | 更新日期: 2023-09-27 18:19:34

我正在努力跟踪用户和其他应用程序复制的文件。FileSystemWatch只有Changed、Created、Deleted、Disposed、Error和Renamed的事件。当复制功能访问文件或将新文件复制到何处时,它不会触发事件。

是否有监控windows复制事件/功能的方法?

C#跟踪复制的文件

我不知道如何使用C#。

如果你愿意编写一个文件系统过滤器驱动程序,你可以这样做。[绝对是专家领域,因为有损坏文件和/或降低系统的空间]

文件系统筛选器驱动程序拦截针对文件的请求系统或另一个文件系统筛选器驱动程序。通过拦截请求之前,筛选器驱动程序可以扩展或替换的原始目标提供的功能要求文件系统筛选器驱动程序的示例包括防病毒过滤器、备份代理和加密产品。开发文件系统和文件系统筛选器驱动程序,使用IFS(可安装文件系统)工具包,该工具包随Windows驱动程序工具包(WDK)一起提供。

您使用FileSystemWatcher做的是正确的。Windows没有任何用于可靠地报告副本的内置机制。

你可以挂接操作系统复制例程,但这不能保证你有好的结果:应用程序只需打开源文件和目标文件并复制字节,就可以自由地实现自己的复制。

重命名不同,因为操作系统进行的重命名无法通过其他方式轻松模仿,所以您将使用FileSystemWatcher捕获所有重命名。请注意,在驱动器之间移动更像是复制:您不会收到Renamed通知,而是收到Created和Deleted通知。

因此,如果你真的需要注意到一个文件被复制,我建议的方法是:

  • 除了挂接FileSystemWatcher之外,还挂接CloseFile调用
  • 每当文件被关闭时,可能是因为它是拷贝/跨驱动器移动的源或目标。检查它的大小
  • 如果在相当短的时间内发现两个大小相同的已关闭文件,请比较内容。相当耗费资源,但这是唯一可靠的方法

您可以使用Windows的审核文件和文件夹访问功能,该功能可以写入事件日志条目,并且您可以设置程序以在此类事件发生时启动

我想不出什么好办法了。

对于每个新创建的文件,您需要检查文件系统中的任何位置是否存在完全重复的文件(可能具有不同的名称)。很明显,你可以使用这种蛮力,但解决方案会非常不雅、缓慢且脆弱!