2009-10-01 16 views
16

Próbuję znaleźć sposób w kakao, aby przetłumaczyć rozszerzenia plików na jednolite identyfikatory typów. Oznacza to, że chcę znaleźć jakiś sposób, by w ten sposób:Uzyskiwanie jednolitego identyfikatora typu dla danego rozszerzenia

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

Rozglądałem na docs NSWorkspace ale nie mogłem znaleźć nic. Najbliżej mogę dostać było:

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

która zwraca ikonę rozszerzenia pliku, a

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

że robi dokładnie przeciwieństwo tego, co próbuję zrobić. Czy ktokolwiek z was wie, jak to zrobić?

Mam nadzieję, że nie będę musiał ręcznie sprawdzać wielu rozszerzeń.

Z góry dziękuję.

Odpowiedz

37

Musiałem to około tydzień temu:

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

Jeśli uruchomię to na rozszerzeniach @ "php" @ "jpg" @ "html" i @ "TTF", drukuje:

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

Po prostu nie zapominaj, że ponieważ nazwa funkcji ma w sobie 'Create', odpowiadasz za zwolnienie obiektu. – Alex

+0

Dzięki! Zadziałało. Początkowo miałem pewne problemy, ale to dlatego, że nie przycinałem białych znaków i znaków nowego wiersza z ciągów ścieżek. (Czytam je z narzędzia wiersza poleceń.) –

+3

Potrzebowałem tego właśnie dzisiaj. :-) To jest jeszcze czystsze, jeśli otoczysz je w ten sposób: 'NSString * uti = [NSMakeCollectable (UTTypeCreatePreferredIdentifierForTag (kUTTagClassFilenameExtension, (CFStringRef) [pathExtension pathExtension], NULL)) autorelease];' –

9

można użyć terminalu i powołać mdls która zawiera wszystkie rodzaje informacji na pewnego rodzaju plików, włączając w ZUM.

mdls /myPath/to/myFile.ext 

mdls pokaże Ci powiązanych ZUM w kMDItemContentTypeTree (jest to również możliwe, aby zadzwonić mdls z poziomu aplikacji Cocoa btw).

+0

to jest dobra informacja –

Powiązane problemy