2015-09-26 58 views
-1

FileSystemWatcher的处理移动文件 - 另一种解决方案

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

  • 我怎么能检测到变化,如果我将选择多个文件,然后按Ctrl + C,Ctrl键许多问题+ V,或右键单击并选择复制,然后粘贴到相同的目录中?
  • 我如何检测,如果我将选择多个目录?
  • 最后一个,如果我模拟移动文件?我可以删除文件,并在不同的地方创建相同的名称。

我知道我可以使用定时器,进程锁定检测,验证哪个进程使用文件(如果explorer.exe然后它可能是移动文件),但这种解决方案并不完美,它是非常无效的。我对此如何解决这个问题感到不安,我决定用低级语言来实现它。这可能使用C或汇编程序来做到这一点吗?我知道每个东西都可以使用汇编程序,所以有可能在asm中实现这一点?我想使用汇编程序或C创建我自己的FileSystemWatcher,但我应该在哪里寻找信息如何做到这一点?

+0

你指的是C#的'System.IO.FileSystemWatcher'吗?作为一个涉及文件系统监控项目的人,我只能告诉你:这是非常困难的,你应该使用任何高层次的设施,除非你愿意花费大量的时间,否则不会更深入。 –

+0

谢谢,我在stackoverflow上看到了一个问题,在.NET中使用了一些包含OS更改日志的数据库的高级解决方案,但是这仅适用于特定系统 - Windows XP Professional with SP3(如果我没有误导) ,现在我正在寻找这个线程,我找不到 – shx

回答

0

当文件系统接收到来自操作系统的相应请求时,可以使用文件系统过滤器驱动程序轻松检测相同文件系统内的文件移动。其他场景,如移动到另一个磁盘或通过复制/删除序列移动,即使使用过滤器驱动程序也难以追踪,因为您需要在已创建/写入的文件与正在删除的文件(可能位于另一个磁盘)。

如果你打算写一些安全机制(如DRM),那么我需要提醒复制(如加密或压缩),这使你的任务更加困难时,数据可以被改变。

不过你可以看看文件系统过滤驱动程序 - 如果你决定去与检测文件系统事件,如驱动程序是一个更可靠和强大的机制比FileSystemWatcher的。

相关问题