gpt4 book ai didi

objective-c - 使用 Lion 上的 FSEvents 跟踪文件重命名/删除

转载 作者:太空狗 更新时间:2023-10-30 03:20:23 25 4
gpt4 key购买 nike

我正在尝试使用 FSEvents 来检测文件何时从特定文件夹中添加/删除。目前,我围绕 FSEvents 实现了一个简单的包装器,它工作正常:我得到了所有事件。

但我现在遇到的问题是,当我在 Finder 中重命名文件时,我发现了 2 个不同的事件:第一个是“重命名”类型的旧文件名,另一个是“重命名”类型的新文件文档名称。两次调用的事件 ID 不同。

那么,我应该如何知道哪个“重命名”事件包含旧名称,以及哪个事件包含旧名称?我试着查看文档,但不幸的是,没有记录 kFSEventStreamEventFlagItemRenamed ...它在 Lion 中似乎是新的。

PS:我唯一能想到的方法是:在重命名的事件上,我检查我的 UI 以查看是否有与事件路径对应的项目。如果是这样,我将其标记为重命名。如果没有,我会检查一个项目是否被标记为重命名,如果是,然后我将它重命名为新的事件路径。但我真的不喜欢这个主意......

编辑:好的,我按照我的“PS”实现了一些事情:我注意到在重命名某些东西时,这两个事件的 ID 是连续的,因此有了包含新名称的事件 ID,我可以获取包含旧名称的事件。在“重命名”事件的情况下,我只是在我的界面中使用一个小字典来存储 ID 和关联路径。

无论如何,我现在可以捕获重命名事件,甚至移动事件:当您移动文件时,它是一个“重命名”事件,由 FSEventStream 捕获...<​​/p>

但是,我还有最后一个问题:删除。当我删除某些内容时,它会被移至回收站:我收到一个“重命名”事件。但问题是我没有收到第二个重命名事件。 .DS_Store 文件中只有一个“已修改”事件。我认为 Finder 使用此文件来了解垃圾箱中有哪些文件等。因此我可以检查对此文件的修改,并获取最后一个“重命名”事件以检测文件是否已发送到垃圾箱。但我使用的是 TotalFinder,它使用 Asepsis,它修改了 Finder 存储 .DS_Store 文件的方式:我不再收到关于此的“修改”。总结一下:我无法检测到文件何时发送到垃圾箱......

知道我该怎么做吗?也许使用 FSEvents 以外的东西来只捕捉这个事件?

最佳答案

嗯,我没有找到我的问题的完美答案,但我找到了一个我最终非常满意的解决方案,所以我想我可以分享 ^^

正如我所说,将内容移至垃圾箱时,如果您只观看 1 个文件夹,则您将无法捕捉到图像被放入垃圾箱时生成的事件。因此,我决定执行以下操作:我有一个类在根文件夹 ("/") 上创建一个流,以便它捕获所有事件 -> 这解决了文件被发送到垃圾箱的问题,以及所有此类问题。然后,此类允许在某些路径上注册委托(delegate)。因此,我没有创建许多流,而是创建了一个大流,然后根据需要过滤事件,并创建了许多委托(delegate)。

因此,当我想在特殊文件夹中观看事件时,我现在要做的就是:

[[FSEventsListener instance] addListener:self forPath:somePath];

我只需在应用程序启动时创建一个 FSEventListener 实例,并在应用程序停止时释放它。我只需要实现以下 3 个将自动调用的方法:

-(void)fileWasAdded:(NSString *)file;
-(void)fileWasRemoved:(NSString *)file;
-(void)fileWasRenamed:(NSString *)oldFile to:(NSString *)newFile;

如果你对这个小工具的源代码感兴趣,你可以在这里查看:http://blog.pcitron.fr/tools/macosx-imageviewer/ (该实用程序是在 0.8 版本中添加的)

我将它开发为一个小图像查看器的一部分,以保持 UI 与磁盘内容同步(它显示每个目录中包含的图像数量等)。源代码可用,实用程序在 Utils/FSEventsListener.h/.m.

如果有人真的下载了应用程序并查看了源代码,如果您发现任何有用的东西(性能/功能改进等),请随时发表评论/发邮件 ^^

关于objective-c - 使用 Lion 上的 FSEvents 跟踪文件重命名/删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7300998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com