アプリのファイルシステムに各ファイルに関するメタデータを保持させたいだけでなく、ユーザー側でのディレクトリ作成もサポートしたいと考えています。私は見ましNSFileWrapper
たが、メタデータを含むファイルをディレクトリとして保存しているようです。これは理にかなっていますが、実際のディレクトリとNSFileWrapper
ディレクトリをどのように区別すればよいでしょうか? plist
または、代わりに、各ディレクトリに隠しファイルを使用してメタデータを追跡する必要がありますか? 助けてくれてありがとう!
1 に答える
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で、現在のキャレット位置、ブックマーク、行の折りたたみなどの状態情報を保存します。
メタデータは揮発性であり、重要な情報を保持するために依存すべきではないことに注意することが重要です。
- メタデータは、拡張メタデータ (FAT32 など) をサポートしないファイルシステムに格納されている場合や、圧縮、ネットワーク、またはその他のファイル処理ソフトウェアによって誤ってまたは意図的に変更された場合など、さまざまな理由で移動/変更/削除される場合があります。
- メタデータは共有名前空間であるため、他のアプリケーションとの相互運用性に優れていますが、干渉に対して脆弱です。名前の衝突を避けるために、キー名には一意の識別子 (つまり、ドメイン名) をプレフィックスとして付ける必要があります。
追加の参照:
于 2016-07-21T00:33:47.280 に答える