Получить kMDItemKind для файлов внутри пакетов возвращает ноль - PullRequest
0 голосов
/ 19 августа 2010

По какой-то причине я не могу сделать это для файлов внутри пакетов и файлов, находящихся на разных томах.

Являюсь ли я единственным, кто испытывает эту проблему, и если нет, как мне ее решить?

У 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?

1 Ответ

1 голос
/ 19 августа 2010

Получить kMDItemKind для файлов внутри пакетов возвращает ноль

Правильно. Вы не можете получить свойства метаданных для файлов, которые не были проиндексированы метаданными, и он не индексирует файлы внутри комплектов, в определенных папках и на любом томе, для которого индексация отключена (включая тома, доступные только для чтения). , где метаданные не могут записать индекс в том).

У Finder, похоже, нет проблем с отображением свойств прожектора для тех же файлов, с которыми у меня проблемы.

Как вы это тестируете? Я получил информацию о файле PNG и о файле PNG внутри пакета приложения; первый имел обычные свойства изображения (например, размеры), но тот, который находился внутри пакета, ничего не показал.

Если вы просто хотите Kind, используйте функцию LSCopyKindStringForURL . Как и большинство функций Core Services, он следует правилам управления памятью CF .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...