2016-07-15 65 views
3

我想讓我的應用程序文件系統保存關於其中每個文件的元數據,但也支持在用戶端創建目錄。我看過NSFileWrapper,但它似乎將元數據保存爲目錄的文件。這是有道理的,但現在如何區分實際目錄和NSFileWrapper目錄?或者我應該在每個目錄中使用隱藏的plist文件跟蹤元數據?預先感謝任何幫助!區分NSFileWrapper和目錄?

+1

它看起來像'setxattr'可能對這項工作。 http://nshipster.com/extended-file-attributes/ –

+0

@LukeVanIn這絕對是真棒。你能否將這一點形容爲某種答案,並引用了它的使用情況?像TextMate一樣? –

回答

1

您可以使用setxattr在文件上存儲元數據的額外鍵/值對。 Mattt Thompson撰寫了關於NSHipster的優秀深度文章。

這裏是例如從製品,顯示出如何設置的屬性值:在其上支持擴展的元數據屬性的Mac文件系統

#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作品。在OS X和iOS上,這由HFS +支持,其中元數據存儲在資源分支中,最大大小限制爲128KB。

您可以使用listxattr來檢索可用標籤。使用getxattr檢索特定標籤的值。

使用此應用程序的一個示例是TextMate,它存儲狀態信息,例如當前插入符號位置,書籤和行摺疊。

重要的是要注意元數據是不穩定的,不應該依賴於保留關鍵信息。

  1. 元數據可以被移動/改變/剝離出於各種原因,諸如被存儲在不支持擴展的元數據(例如FAT32)文件系統,或通過壓縮,網絡,或其他被意外地或故意地改變文件處理軟件。
  2. 元數據是一個共享的命名空間,這對於與其他應用程序的互操作性非常有用,但也容易受到干擾。爲避免名稱衝突,密鑰名稱應以唯一標識符(即域名)作爲前綴。

其他參考: