2

これは Ken T. によって以前に回答されているようですが、コードが機能しているように見え、setxattr() への呼び出しが 0 を返す場合がありますが、変更したい項目は変更されません。

具体的には、メタデータ属性 kMDItemDisplayName を変更しようとしています。呼び出しは次のようになります (Ken T によって投稿されたサンプルをモデルにしています)。

[注: 以下の「name」パラメーターは NSString です *]

rc = setxattr([pathString cStringUsingEncoding:NSUTF8StringEncoding],
                 "kMDItemDisplayName",
                 [name cStringUsingEncoding:NSUTF8StringEncoding],
                 [name lengthOfBytesUsingEncoding:NSUTF8StringEncoding],
                 0,
                 0);

問題のファイルで mdls を実行すると、kMDItemDisplayName 属性が存在することが示されますが、実際のファイル名以外に変更することはできません (これがデフォルトの動作であると想定しています)。

setxattr() がどのように機能するかについて誤解していますか?

どんな助けでも大歓迎です。

ああ、ところで、なぜ私はこれをやろうとしているのですか? (Bare Bones の Yojimbo がどのように動作するかを調べると)、Spotlight は kMDItemDisplayName 値を使用して、ファインダーの Spotlight 検索結果メニューにファイルを一覧表示しているように見えます。これをアプリに実装したいと考えています。

ありがとう!


おいおい…ちょっと待って…

コマンドラインから xattr -l を実行すると、xattr が知る限り、kMDItemDisplayName という属性があり、それを設定したことがわかります...ただし、同じファイルの mdls では、kMDItemDisplayName 属性がファイル名。

xattr の代わりに Launch Services について尋ねる必要がありますか??


4

1 に答える 1

3

わかった。もう少し探し回り、Apple のドキュメントをさらに読んだ後、私は何をする必要があるかを理解しました。この情報が将来誰かに役立つことを期待して、私は自分の質問に答えています。

アプリのファイル形式をサポートするために独自の mdimporter を作成する必要があったため、メタデータのインポート時に kMDItemDisplay という名前のアイテムをメタデータ ストアに追加しようと考えました。

私の驚きと喜びに、それは最初の試みでうまくいきました!

したがって、答えは、カスタム kMDItem* タイプを上書きまたは追加する場合は、Spotlight インポーターを使用してメタデータのインポート時に行うことです。

誰かがこれが役立つことを願っています!

于 2012-11-29T08:22:15.803 に答える