我一直在玩我的FSEvents一个小应用程序来同步我的应用程序的内容与硬盘驱动器上的内容(基本上,它是一个小图像查看器,我希望其内容在硬盘内容更改时更新)
我使用kFSEventStreamCreateFlagFileEvents标志创建了我的流,但我很难弄清楚这些事件是如何由操作系统(或内核,或其他)生成的.不幸的是,没有关于使用此标志生成的事件的文档...他们似乎是10.7的新手,但仍未记录.
所以,我的主要问题是"重命名".当我正在进行简单的重命名时,会向我的回调发送2个kFSEventStreamEventFlagItemRenamed事件.一个包含旧文件名,第二个包含新文件名.重命名一批文件时会出现问题,这些事件可能不是顺序的.例如,它有以下情况:
我可能会按此顺序收到事件:
当你遇到第二个重命名事件时似乎没有任何方法可以获得第一个重命名事件的ID ...所以我做的是:当接收"重命名"事件时,我做一个stat()与文件名.如果stat成功返回,则表示它是新文件名.如果没有,这意味着它是旧的.我仍然没有办法链接这两个事件,但至少我可以通过删除旧文件并添加新文件来解决.
所以,我基本上有两个问题:
首先是:我完全失明了,没有看到通过fsevents正确捕捉"重命名"事件的明显方法吗?
第二个我:我有时会有一个奇怪的错误,而不是只有2个重命名的事件,3个被发送!所以我得到一个文件添加两次...我不确定这是不是一个错误,或者如果这是因为我完全错过了使用kFSEventStreamCreateFlagFileEvents标志的fsevent API ...
欢迎任何帮助,我完全没有想法来解决这个问题!
由于这些事件仅处理路径,因此您必须做一些额外的工作来处理重命名。一种选择是跟踪您感兴趣的文件的索引节点号。因此,当您执行 stat 调用时,还要记下索引节点号并查看它是否与您正在跟踪的任何文件匹配。
但请注意,操作系统可能会重用已删除文件的索引节点号,因此将它们作为唯一标识符并不是绝对正确的。
| 归档时间: |
|
| 查看次数: |
1776 次 |
| 最近记录: |