How to determine file equivalency between app sessions prior to OS X 10.10?
我正在制作一个应用程序来监控对"热"文件夹的更改并将新文件上传到远程服务器(想想单向 Dropbox)。应用程序需要记住之前上传的文件,而不是重新上传它们,即使用户将它们移动到不同的子文件夹也是如此。如果我可以访问 10.10 API,我只需使用 NSURL 的
-
有
NSURLFileResourceIdentifierKey 但它不会在系统引导期间维护,因此它对于多个相同会话的使用无效。 - 我可以为每个文件计算一个 MD5/SHA1 哈希,但是这个应用程序是针对专业照片用户的,所以对数百个数兆字节的图像文件进行哈希处理的前景并不吸引人。
- Alias 框架和 FSRefs 在 10.8 中都已弃用,因此我不愿意基于它们构建解决方案。
我忽略了哪些其他方法?
我最终确定的解决方案是为我的应用程序触及的每个文件分配一个 UUID,该 UUID 存储在文件的扩展属性中,位于我的应用程序唯一的键下。移动或复制文件时,扩展属性会跟随文件。在读取目录结构时,我会检查每个文件的 UUID,如果不存在则分配一个。如果由于遇到文件副本而发生 UUID 冲突(我正在保存遇到的 UUID 的查找表),我会为后来遇到的文件分配一个新的 UUID。
NSHipster 关于扩展属性的文章
我在 NSURL 上的一个类别中封装了与 setxattr()、getxattr() 和 listxattr() 的杂乱 C 交互,这让我可以轻松地在 URL 指向的文件系统文档上查询/获取/设置任意文本属性。