Получение Унифицированного Идентификатора Типа для данного расширения - PullRequest
19 голосов
/ 02 октября 2009

Я пытаюсь найти какой-то способ в Какао для перевода из расширений файлов в унифицированные идентификаторы типов. То есть я хочу найти способ сделать это:

".jpg" => "public.jpeg"
".html" => "public.html" 
".ttf"=> "public.truetype-font"

Я искал документы в NSWorkspace, но ничего не смог найти. Самое близкое, что я мог получить, было:

- (NSImage *)iconForFileType:(NSString *)fileType

, который возвращает значок для расширения файла, и

– (NSString *)preferredFilenameExtensionForType:(NSString *)typeName

, что делает прямо противоположное тому, что я пытаюсь сделать. Кто-нибудь из вас знает, как это сделать?

Я действительно надеюсь, что мне не нужно проверять множество расширений вручную.

Заранее спасибо.

Ответы [ 2 ]

40 голосов
/ 02 октября 2009

Мне это понадобилось около недели назад:

NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, 
                                                                   (CFStringRef)[myFilePath pathExtension], 
                                                                   NULL);

Если я запускаю это для расширений @ "php", @ "jpg", @ "html" и @ "ttf", выводится:

public.php-script
public.jpeg
public.html
public.truetype-ttf-font
11 голосов
/ 01 января 2012

Вы можете использовать Терминал и вызывать mdls , который предоставляет вам все виды информации для определенного типа файла, включая UTI.

mdls /myPath/to/myFile.ext

mdls покажет вам связанные UTI в kMDItemContentTypeTree (также можно вызвать MDL из вашего приложения Cocoa).

...