2010-08-18 18 views
0

出於某種原因,我無法在捆綁文件和駐留在不同捲上的文件中執行此操作。獲取捆綁文件中的kMDItemKind返回無

我是唯一一個遇到這個問題,如果不是我該如何解決它?

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); 

OUTPUT:

文件: /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的元數據?

回答

1

獲取kMDItemKind上的文件中捆綁零

正確的回報。您無法獲取元數據尚未編入索引的文件的元數據屬性,也不會爲捆綁文件,某些文件夾中以及禁用索引的任何捲上的文件建立索引(包括但不限於只讀卷,元數據無法將索引寫入卷)。

Finder似乎沒有困難顯示我遇到問題的相同文件的聚光燈屬性。

你是怎麼測試的?我有關於PNG文件的信息,以及應用程序包內的PNG文件;第一個具有通常的圖像屬性(例如尺寸),但是一個包內沒有顯示任何內容。

如果您只是想要Kind,請使用the LSCopyKindStringForURL function。像大多數核心服務功能一樣,它遵循the CF memory-management rules

+0

非常有意義。 LSCopyKindStringForURL正是我正在尋找的東西,我在錯誤的軌道上。再次,你有解決我的難題。謝謝。 – neoneye 2010-08-19 07:24:19