2012-03-24 3 views
2

Есть ли способ программного доступа к метаданным одного файла в MacOS?Доступ метаданных одного файла

Я знаю, что Apple предоставляет NSMetadataQuery, но, по-видимому, он позволяет только найти в частности папки для файлов, соответствующих некоторым параметрам. На самом деле я бы предпочел не искать все файлы, но проверить, соответствует ли конкретный файл.

Есть ли способ или единственное решение, чтобы проанализировать результаты запроса и посмотреть, есть ли мой файл среди них?

ответ

3

Вы можете получить метаданные так же, как команда mdls получает свои данные. Найдите в документации документацию MDItemCreate. (Вы найдете: Ядро библиотеки -> Data Management -> Управление файлами -> MDItem Reference)
Я надеюсь, что следующий метод для создания словаря метаданных даст вам то, что вам нужно:

- (NSDictionary *) metaDataDictionaryForFileAt:(NSString *)fileName 
{ 
    MDItemRef item = MDItemCreate(kCFAllocatorDefault, (CFStringRef)fileName); 
    if(item==nil) return nil; 

    CFArrayRef list = MDItemCopyAttributeNames(item); 
    NSDictionary *resDict = (NSDictionary *)MDItemCopyAttributes(item, list); 
    CFRelease(list); 
    CFRelease(item); 
    return [resDict autorelease]; 
} 

Примечание: Значение kMDItemContentType, kMDItemContentTypeTree и kMDItemKind определяется суффиксом имени файла не по содержанию файла!

+1

Спасибо, это именно то, что я искал! – Saphrosit

1

Я не думаю, что для этого есть API (что странно, вы должны указать ошибку). Если вы не хотите запускать запрос, то единственным вашим вариантом будет использовать NSTask, чтобы вызвать экземпляр команды mdls, а затем проанализировать результаты.

+0

Да, мне было интересно узнать об этой другой возможности, но я не хуже, чем ... :) Кроме того, мне, вероятно, придется делать такие проверки сотни или тысячи раз. Возможно, ограничение пути поиска к папкам с небольшим количеством файлов, вопрос не должен быть таким дорогим (даже если это очень раздражает) ... – Saphrosit

Смежные вопросы