【问题标题】:Distinguish between a NSFileWrapper and a directory?区分 NSFileWrapper 和目录?
【发布时间】:2016-11-18 03:08:10
【问题描述】:

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

【问题讨论】:

  • 看起来setxattr 可能适用于此。 nshipster.com/extended-file-attributes
  • @LukeVanIn 这真是太棒了。您能否将其表述为某种答案并引用使用它的案例?喜欢 TextMate?

标签: swift directory metadata nsfilewrapper


【解决方案1】:

您可以使用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. 元数据是一个共享命名空间,这使得它非常适合与其他应用程序的互操作性,但也容易受到干扰。为避免名称冲突,键名应以唯一标识符(即域名)作为前缀。

其他参考资料:

【讨论】:

    猜你喜欢
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2010-09-17
    • 2012-02-19
    相关资源
    最近更新 更多