首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用FileSystemWatcher检测移动的文件

使用FileSystemWatcher检测移动的文件
EN

Stack Overflow用户
提问于 2009-08-17 04:10:01
回答 3查看 17.8K关注 0票数 23

我意识到FileSystemWatcher没有提供移动事件,相反,它将为同一文件生成单独的删除和创建事件。( FilesystemWatcher同时监视源文件夹和目标文件夹)。

然而,我们如何区分真正的文件移动和某个随机创建的文件,该文件恰好与最近删除的文件同名?

FileSystemEventArgs类的某种属性,如"AssociatedDeleteFile“,如果是移动的结果,则分配给删除的文件路径,否则为NULL,这将是很好的。但这当然不存在。

我还了解到FileSystemWatcher是在基本文件系统级别操作的,因此“移动”的概念可能只对更高级别的应用程序有意义。但如果是这种情况,人们会推荐哪种算法来处理我的应用程序中的这种情况?

根据反馈进行更新:

FileSystemWatcher类似乎将移动文件看作是两个不同的事件,一个是删除原始文件,然后是在新位置创建。

不幸的是,在这些事件之间没有提供“链接”,因此如何区分文件移动和正常的删除或创建并不明显。在操作系统级别,一次移动是特殊处理的,你几乎可以瞬间移动一个1 1GB的文件。

有几个答案建议对文件使用散列,以便在事件之间可靠地识别它们,我将明确地采用这种方法。但是,如果有人知道如何更简单地检测移动,请留下答案。

EN

回答 3

Stack Overflow用户

发布于 2009-08-17 04:13:11

我冒险猜测“移动”确实不存在,所以你真的只需要寻找“删除”,然后将该文件标记为“可能被移动”的文件,然后如果你很快看到它的“创建”,我想你可以假设你是正确的。

您是否遇到过随机创建文件影响您的移动检测的情况?

票数 2
EN

Stack Overflow用户

发布于 2009-08-17 04:17:54

可能需要尝试the documentation中提到的OnChanged和/或OnRenamed事件。

票数 2
EN

Stack Overflow用户

发布于 2020-08-24 08:09:27

StorageLibrary类can track moves。来自Microsoft的示例:

代码语言:javascript
复制
StorageLibrary videosLib = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos);
StorageLibraryChangeTracker videoTracker = videosLib.ChangeTracker;
videoTracker.Enable();

完整的示例可以在here中找到。然而,看起来你只能跟踪Windows "known libraries“内部的变化。

您还可以尝试使用StorageFolder.TryGetChangeTracker()获取StorageLibraryChangeTracker。但是您的文件夹必须在同步根目录下,您不能使用此方法来获取文件系统中的任意文件夹。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1286114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档