【问题标题】:FileSystemWatcher handling moving file - another solutionFileSystemWatcher 处理移动文件 - 另一种解决方案
【发布时间】:2015-09-26 17:30:30
【问题描述】:

我试图使用 FileSystemWatcher 来检测是否某些文件或目录已移动到另一个位置。问题是,我不得不使用 onCreated 和 onDeleted 事件来处理这个问题,但是使用这个解决方案有很多问题

  • 如果我选择多个文件并按 Ctrl+C、Ctrl+V 或右键单击并选择复制然后粘贴到同一目录中,我如何检测更改?
  • 如果我会选择多个目录,我该如何检测?
  • 最后一个,如果我模拟移动文件呢?我可以删除文件并在不同的地方创建同名文件。

我知道我可以使用计时器、进程锁定检测、验证哪个进程使用文件(如果 explorer.exe 则可能是移动文件),但这个解决方案并不完美,而且非常无效。我在思考如何解决这个问题,我决定用低级语言来实现它。是否可以使用 C 或汇编程序来做到这一点?我知道使用汇编程序可以做任何事情,那么可以在 asm 中实现吗?我想使用汇编程序或 C 创建我自己的 FileSystemWatcher,但我应该在哪里寻找信息如何做到这一点?

【问题讨论】:

  • 你指的是C#的System.IO.FileSystemWatcher吗?作为从事文件系统监控项目的人,我只能告诉您:这非常困难,您应该使用任何可以使用的高级工具,除非您愿意花费大量时间在上面,否则不要更深入。
  • 谢谢,我可能在 stackoverflow 上看到了某个问题,这是在 .NET 中使用一些包含操作系统更改日志的数据库的高级解决方案,但这仅在特定系统上可用 - 带有 SP3 的 Windows XP Professional (如果我没有误导),现在我正在搜索这个线程,我找不到

标签: file move filesystemwatcher


【解决方案1】:

使用文件系统过滤器驱动程序可以很容易地检测到同一文件系统中的文件移动,因为文件系统收到了来自操作系统的相应请求。即使使用过滤器驱动程序也很难跟踪其他情况,例如移动到另一个磁盘或通过复制/删除顺序移动,因为您需要在已创建/写入的文件与正在删除的文件之间进行匹配(可能在另一个磁盘)。

如果您打算编写一些安全机制(如 DRM),那么我需要提醒您,在复制过程中可以更改数据(例如加密或压缩),这会使您的任务更加困难。

您仍然可以查看文件系统过滤器驱动程序 - 如果您决定继续检测文件系统事件,这样的驱动程序是比 FileSystemWatcher 更可靠和强大的机制。

【讨论】:

    猜你喜欢
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2012-03-31
    相关资源
    最近更新 更多