2016-07-15 4 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を使用してください。

これを使用するアプリケーションの1つの例は、現在のキャレット位置、ブックマーク、および折り返しなどの状態情報を格納するTextMateです。

メタデータは揮発性であり、重要な情報を保持するために信頼されるべきではないことに注意することが重要です。

  1. メタデータは、拡張メタデータ(例えば、FAT32)をサポートしないファイルシステム上に格納されているような様々な理由から、ストリッピング/変更/移動、又は圧縮、ネットワーク、または他によって誤ってまたは意図的に変更されることでもよいですファイル処理ソフトウェア。
  2. メタデータは共有名前空間であり、他のアプリケーションとの相互運用性には優れていますが、干渉の影響を受け易いため、名前の競合を避けるために、キー名の前に固有の識別子(ドメイン名)を付ける必要があります。

その他の参照:

関連する問題