区分NSFileWrapper和目录?

时间:2016-07-15 02:40:54

标签: swift directory metadata nsfilewrapper

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

1 个答案:

答案 0 :(得分: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,它存储状态信息,例如当前插入符号位置,书签和行折叠。

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

  1. 元数据可能由于各种原因而被移动/更改/剥离,例如存储在不支持扩展元数据的文件系统(例如FAT32)上,或者通过压缩,网络或其他文件处理软件意外或故意更改。
  2. 元数据是一个共享命名空间,这使其非常适合与其他应用程序的互操作性,但也容易受到干扰。为避免名称冲突,密钥名称应以唯一标识符(即域名)为前缀。
  3. 其他参考资料: