2009-10-01 3 views
16

Ich versuche, einen Weg in Cocoa zu finden, um von Dateierweiterungen in Uniform Type Identifiers zu übersetzen. Das heißt, möchte ich dies einen Weg finden, zu tun:Ermitteln eines einheitlichen Typenbezeichners für eine angegebene Erweiterung

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

Ich habe auf dem NSWorkspace docs gesucht, aber nichts gefunden. Der nächste könnte ich war:

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

, die das Symbol für eine Dateierweiterung zurückgibt, und

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

, das genau das Gegenteil von dem, was ich versuche zu tun. Kennt jemand von euch das?

Ich hoffe wirklich, ich muss nicht für viele Erweiterungen von Hand überprüfen.

Vielen Dank im Voraus.

Antwort

37

brauchte ich diese vor einer Woche über:

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

Wenn ich dies auf den Erweiterungen laufen @ "php", @ "jpg", @ "html", und @ "ttf", druckt es:

public.php-script 
public.jpeg 
public.html 
public.truetype-ttf-font 
+8

Vergessen Sie nicht, dass Sie, weil der Funktionsname 'Create' hat, dafür verantwortlich sind, das Objekt freizugeben. – Alex

+0

Danke! Es funktionierte. Ich hatte anfangs einige Probleme, aber es war, weil ich Whitespace- und Newline-Zeichen aus den Pfadzeichenfolgen nicht zuschneiden. (Ich lese sie aus einem Befehlszeilenprogramm.) –

+3

Ich brauchte das gerade heute. :-) Es ist noch sauberer, wenn Sie es wie folgt umhüllen: 'NSString * uti = [NSMakeCollectable (UTTypeCreatePreferredIdentifierForTag (KUTTagClassFilenameExtension, (CFStringRef) [myFilePath pathExtension], NULL)) Autorelease];' –

9

können Sie das Terminal verwenden und mdls aufrufen, die Sie alle Arten von Informationen zu einem bestimmten Dateityp einschließlich HWI gibt.

mdls /myPath/to/myFile.ext 

mdls zeigen Ihnen dann die zugehörige HWI in kMDItemContentTypeTree (es ist auch möglich, mdls aus Ihrer Cocoa App btw zu nennen).

+0

das ist eine gute Information –

Verwandte Themen