C#跟踪复制的文件

时间:2012-01-06 15:52:11

标签: c# windows copy filesystemwatcher

我正在尝试跟踪用户和其他应用程序复制的文件。 FileSystemWatch仅包含Changed,Created,Deleted,Disposed,Error和Renamed事件。 当复制功能访问文件或复制新文件时,它不会触发事件。

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

4 个答案:

答案 0 :(得分:4)

我不知道如何使用C#。

如果您愿意写File System Filter Driver,可以这样做。 [绝对是专家领域,因为存在破坏文件和/或关闭系统的余地]

  

文件系统筛选器驱动程序拦截以文件为目标的请求   系统或其他文件系统过滤驱动程序。通过拦截   在请求到达其预期目标之前,过滤器驱动程序可以   扩展或替换原始目标提供的功能   请求。文件系统筛选器驱动程序的示例包括防病毒   过滤器,备份代理和加密产品。开发文件   系统和文件系统筛选器驱动程序,使用IFS(可安装文件   System)Kit,随Windows Driver Kit(WDK)一起提供。

答案 1 :(得分:1)

你正在使用FileSystemWatcher做正确的事。 Windows没有任何可靠的报告副本的内置机制。

您可以挂钩操作系统复制例程,但这不能保证您获得良好的结果:应用程序可以通过打开源文件和目标文件并复制字节来自由实现自己的副本。

重命名是不同的,因为操作系统完成的重命名不能通过其他方式轻易模仿,因此您将使用FileSystemWatcher捕获所有重命名。请注意,在驱动器之间移动更像是复制:您不会获得重命名通知,而是获得创建和删除。

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

    除了CloseFile之外,
  • Hook FileSystemWatcher次来电。
  • 每当文件关闭时,可能是因为它是复制/交叉驱动器移动的源或目标。检查它的大小。
  • 如果您在相当短的时间内找到两个大小相同的已关闭文件,请比较内容。资源密集型,但这是唯一可行的方法。

答案 2 :(得分:0)

您可以使用Windows的Auditing file and folder access功能编写事件日志条目,并且可以设置程序在发生此类事件时启动

答案 3 :(得分:0)

我想不出任何好办法。

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