区分 NSFileWrapper 和目录?

Distinguish between a NSFileWrapper and a directory?

我想让我的应用程序文件系统保留其中每个文件的元数据,但也支持在用户端创建目录。我查看了 NSFileWrapper,但它似乎将带有元数据的文件保存为目录。这是有道理的,但是现在我如何区分实际目录和 NSFileWrapper 目录?或者我应该改为在每个目录中使用隐藏的 plist 文件来跟踪元数据?在此先感谢您的帮助!

您可以使用 setxattr to store extra key/value pairs of metadata on files. Mattt Thompson has written an excellent in-depth article on 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 to retrieve available tags. Use getxattr 检索特定标签的值。

使用它的一个应用程序示例是 TextMate,它存储状态信息,例如当前插入符位置、书签和折行。

重要的是要注意元数据是易变的,不应依赖它来保留关键信息。

  1. 元数据可能 moved/changed/stripped 出于各种原因,例如存储在不支持扩展元数据(例如 FAT32)的文件系统中,或者被压缩、网络或其他文件意外或有意更改处理软件。
  2. 元数据是一个共享命名空间,这使得它非常适合与其他应用程序的互操作性,但也容易受到干扰。为避免名称冲突,键名应以唯一标识符(即域名)为前缀。

其他参考资料: