我想让我的应用程序文件系统保留有关其中每个文件的元数据,但也支持在用户端创建目录。我看过NSFileWrapper
但它似乎将带有元数据的文件保存为目录。这是有道理的,但是现在我如何区分实际目录和NSFileWrapper
目录?plist
或者我应该使用每个目录中的隐藏文件来跟踪元数据?提前感谢您的帮助!
问问题
254 次
1 回答
2
您可以使用setxattr在文件上存储额外的元数据键/值对。Mattt Thompson 写了一篇关于NSHipster的优秀深入的文章。
这是文章中的示例,展示了如何设置属性值:
#include <sys/xattr.h>
const char *filePath = [fileURL fileSystemRepresentation];
const char *name = "com.Example.Etag";
const char *value = [[response allHeaderFields][@"Etag"] UTF8String];
int result = setxattr(filePath, name, value, strlen(value), 0, 0);
setxattr
适用于支持扩展元数据属性的 Mac 文件系统。在 OS X 和 iOS 上,HFS+ 支持这一点,其中元数据存储在资源分支中,最大大小限制为 128KB。
您可以使用listxattr来检索可用的标签。使用getxattr检索特定标签的值。
使用它的应用程序的一个示例是TextMate,它存储状态信息,例如当前插入符号位置、书签和折线。
重要的是要注意元数据是易变的,不应依赖它来保留关键信息。
- 元数据可能因各种原因被移动/更改/剥离,例如存储在不支持扩展元数据(例如 FAT32)的文件系统上,或者通过压缩、网络或其他文件处理软件意外或有意地更改。
- 元数据是一个共享命名空间,这使得它非常适合与其他应用程序的互操作性,但也容易受到干扰。为避免名称冲突,键名应以唯一标识符(即域名)作为前缀。
附加参考:
于 2016-07-21T00:33:47.280 回答