FileSystemWatcher 处理移动文件 - 另一种解决方案
FileSystemWatcher handling moving file - another solution
嗨
我正在尝试使用 FileSystemWatcher 来检测某些文件或目录是否已移动到另一个位置。问题是,我不得不使用 onCreated 和 onDeleted 事件来处理这个问题,但是使用这个解决方案有很多问题
- 如果我要 select 多个文件并按 Ctrl+C、Ctrl+V 或右键单击并 select 复制然后粘贴到同一目录,我如何检测更改?
- 如果我 select 多个目录,我如何检测?
- 最后一个,模拟移动文件怎么办?我可以删除文件并在不同的地方创建同名文件。
我知道我可以使用定时器、进程锁定检测、验证哪个进程使用文件(如果 explorer.exe 那么它可能正在移动文件),但这个解决方案并不完美而且非常低效。我一直在思考如何解决这个问题,我决定用低级语言来实现它。使用 C 或汇编程序可以做到这一点吗?我知道使用汇编程序可以做任何事情,那么是否可以在 asm 中实现它?我想使用汇编程序或 C 创建我自己的 FileSystemWatcher,但我应该在哪里寻找信息如何做到这一点?
同一文件系统内的文件移动可以使用文件系统过滤器驱动程序轻松检测到,因为文件系统从 OS 接收到相应的请求。其他情况,例如移动到另一个磁盘或按 copy/delete 顺序移动,即使使用过滤器驱动程序也很难追踪,因为您需要在 created/written 到的文件和正在处理的文件之间进行匹配删除(可能在另一个磁盘上)。
如果您打算编写一些安全机制(如 DRM),那么我需要提醒您,数据在复制过程中可能会被更改(例如加密或压缩),这会使您的任务更加困难。
您仍然可以查看文件系统过滤驱动程序 - 如果您决定继续检测文件系统事件,此类驱动程序是一种比 FileSystemWatcher 更可靠、更强大的机制。
嗨
我正在尝试使用 FileSystemWatcher 来检测某些文件或目录是否已移动到另一个位置。问题是,我不得不使用 onCreated 和 onDeleted 事件来处理这个问题,但是使用这个解决方案有很多问题
- 如果我要 select 多个文件并按 Ctrl+C、Ctrl+V 或右键单击并 select 复制然后粘贴到同一目录,我如何检测更改?
- 如果我 select 多个目录,我如何检测?
- 最后一个,模拟移动文件怎么办?我可以删除文件并在不同的地方创建同名文件。
我知道我可以使用定时器、进程锁定检测、验证哪个进程使用文件(如果 explorer.exe 那么它可能正在移动文件),但这个解决方案并不完美而且非常低效。我一直在思考如何解决这个问题,我决定用低级语言来实现它。使用 C 或汇编程序可以做到这一点吗?我知道使用汇编程序可以做任何事情,那么是否可以在 asm 中实现它?我想使用汇编程序或 C 创建我自己的 FileSystemWatcher,但我应该在哪里寻找信息如何做到这一点?
同一文件系统内的文件移动可以使用文件系统过滤器驱动程序轻松检测到,因为文件系统从 OS 接收到相应的请求。其他情况,例如移动到另一个磁盘或按 copy/delete 顺序移动,即使使用过滤器驱动程序也很难追踪,因为您需要在 created/written 到的文件和正在处理的文件之间进行匹配删除(可能在另一个磁盘上)。
如果您打算编写一些安全机制(如 DRM),那么我需要提醒您,数据在复制过程中可能会被更改(例如加密或压缩),这会使您的任务更加困难。
您仍然可以查看文件系统过滤驱动程序 - 如果您决定继续检测文件系统事件,此类驱动程序是一种比 FileSystemWatcher 更可靠、更强大的机制。