Uzyskanie jednolitego identyfikatora typu dla danego rozszerzenia

Próbuję znaleźć w Cocoa sposób na przetłumaczenie z rozszerzeń plików na jednolite identyfikatory typów. To znaczy, chcę znaleźć jakiś sposób na zrobienie tego:

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

Przeszukałem dokumenty NSWorkspace, ale nic nie znalazłem. Najbliżej mi było:

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

, który zwraca ikonę dla rozszerzenia pliku i

– (NSString *)preferredFilenameExtensionForType:(NSString *)typeName
To robi dokładnie odwrotnie niż to, co próbuję zrobić. Czy ktoś z was wie jak to zrobić?

Naprawdę mam nadzieję, że nie będę musiał sprawdzać wiele rozszerzeń ręcznie.

Z góry dzięki.
Author: Marco Aurélio, 2009-10-02

2 answers

Potrzebowałem tego jakiś tydzień temu:

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

Jeśli uruchamiam to na rozszerzeniach @ "php", @ "jpg", @ "html" i @ "TTF", wyświetla:

public.php-script
public.jpeg
public.html
public.truetype-ttf-font
 39
Author: Dave DeLong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-01 20:42:03

Możesz użyć terminala i wywołać mdls, który daje wszystkie rodzaje informacji na temat określonego typu pliku, w tym UTIs.

mdls /myPath/to/myFile.ext

Mdls pokaże powiązane UTi w kMDItemContentTypeTree (możliwe jest również wywołanie mdls z poziomu aplikacji Cocoa btw).

 11
Author: auco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-01 15:17:42