我试图使用FSEvents来检测文件何时添加/从特定文件夹中删除。目前,我实现了一个围绕FSEvents的简单包装,它工作正常:我得到所有事件。使用Lion上的FSEvents跟踪文件重命名/删除
但我现在的问题是,当我在Finder中重命名一个文件时,我捕获了2个不同的事件:第一个类型为“重命名”的旧文件名,另一个“重命名”新的文件名。这两个调用之间的事件id不同。
那么,我该如何知道哪个“重命名”事件包含旧名称,哪个事件包含旧名称?我试着查看文档,但不幸的是,kFSEventStreamEventFlagItemRenamed没有记录......它在Lion中似乎是新的。
PS:我能想到的唯一方法是:在重命名的事件中,我检查了我的UI,看看是否有与事件路径对应的项目。如果是这样,我将其标记为重命名。如果没有,我检查一个项目是否被标记为重命名,如果是,那么我将它重命名为新的事件路径。但我真的不喜欢这个想法...
编辑:好的,我沿着我的“PS”的一行说了些什么:我注意到当重命名某些东西时,2个事件的ID是连续的,所以使用包含新名称的事件的ID,我可以获取包含旧名称的事件。在“重命名”事件的情况下,我只是在界面中使用一个小词典来存储ID和相关路径。
反正我现在能赶上重命名事件,甚至是移动事件:当你移动一个文件,这是这是由FSEventStream抓住了“改名”事件......
不过,我还有一个最后问题:删除。当我删除某些内容时,它会移至回收站:我收到一个“重命名”事件。但问题是我没有收到第二次重命名事件。只有.DS_Store文件上的“修改”事件。我想这个文件被Finder用来了解哪些文件在bin中,等等。所以我可以检查对这个文件的修改,并获取最后一次“重命名”事件来检测文件是否被发送到bin。但是我使用的是使用Apsps的TotalFinder,它修改了Finder存储.DS_Store文件的方式:我不再在此上收到“修改”。 要sumarize:我无法检测文件何时发送到垃圾箱...
任何想法我可以做到这一点?也许用FSEvent以外的东西来捕捉这个事件?
非常有帮助,感谢您的代码:) –
在您的网站上没有联系页面上的发送按钮,请给我你的电子邮件,我想问你一些问题。谢谢:) –
我在我的网站上修复了联系表格。我不知道如何发送私人消息StackOverflow(或者,即使它是可能的^^) – Citron