これは 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 について尋ねる必要がありますか??