0

何らかの理由で、バンドル内のファイルと異なるボリュームにあるファイルに対してこれを行うことはできません。

この問題が発生しているのは私だけですか? そうでない場合、どうすれば解決できますか?

問題が発生しているのと同じファイルの Spotlight プロパティを Finder で表示するのに問題はないようです。

ファイルの kMDItemKind とその他のプロパティを取得したいと考えています。

CFStringRef path = CFSTR("/Applications/Chess.app/Contents/Info.plist"); // bad
// CFStringRef path = CFSTR("/Applications/Chess.app");                  // good

MDItemRef item = MDItemCreate(kCFAllocatorDefault, (CFStringRef)path);
if(!item) {
 NSLog(@"MDItemCreate returned NULL for path: %@", path);
 return nil;
}

CFStringRef kind = MDItemCopyAttribute( item, kMDItemKind );
if(kind) {
 NSLog(@"file: %@  kind: %@", path, (NSString*)kind);
 CFRelease( kind );                            
} else {
 NSLog(@"file: %@  has no kMDItemKind attribute", path);
}
CFRelease( item );

出力:

ファイル: /Applications/Chess.app/Contents/Info.plist に kMDItemKind 属性がありません

このように、コマンドライン ツールの mdls を使用すると、同じ問題が発生します。

prompt> mdls /Applications/Chess.app/Contents/Info.plist
kMDItemFSContentChangeDate = 2009-05-19 08:09:03 +0200
kMDItemFSCreationDate      = 2009-05-19 08:09:03 +0200
kMDItemFSCreatorCode       = ""
kMDItemFSFinderFlags       = 0
kMDItemFSHasCustomIcon     = 0
kMDItemFSInvisible         = 0
kMDItemFSIsExtensionHidden = 0
kMDItemFSIsStationery      = 0
kMDItemFSLabel             = 0
kMDItemFSName              = "Info.plist"
kMDItemFSNodeCount         = 0
kMDItemFSOwnerGroupID      = 0
kMDItemFSOwnerUserID       = 0
kMDItemFSSize              = 3294
kMDItemFSTypeCode          = ""

ご覧のとおり、返されるデータはほとんどなく、kMDItemKind はありません。

Info.plist のメタデータをどのように取得しますか?

4

1 に答える 1

1

バンドル内のファイルを取得kMDItemKindすると nil が返されます

正しい。メタデータがインデックスを作成していないファイルのメタデータ プロパティを取得することはできません。また、バンドル内、特定のフォルダー内、およびインデックス作成が無効になっているボリューム (読み取り専用ボリュームを含むがこれに限定されない) 上のファイルのインデックスを作成しません。 、メタデータがボリュームにインデックスを書き込めない場合)。

問題が発生しているのと同じファイルの Spotlight プロパティを Finder で表示するのに問題はないようです。

これをどのようにテストしていますか?PNG ファイル、およびアプリ バンドル内の PNG ファイルに関する情報を入手しました。最初のものには通常の画像プロパティ (寸法など) がありましたが、バンドル内のものには何も表示されませんでした。

種類だけが必要な場合は、関数を使用LSCopyKindStringForURLます。ほとんどのコア サービス機能と同様に、CF メモリ管理規則に従います。

于 2010-08-19T00:33:50.517 に答える