2009-10-01 17 views
16

Estoy tratando de encontrar la manera de que Cocoa traduzca las extensiones de archivo a identificadores de tipo uniformes. Es decir, quiero encontrar la manera de hacer esto:Obtener un identificador de tipo uniforme para una extensión determinada

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

He buscado en los documentos NSWorkspace pero no pude encontrar nada. Lo más cerca que pude conseguir fue:

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

que devuelve el icono de una extensión de archivo, y

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

que hace exactamente lo contrario de lo que estoy tratando de hacer. ¿Alguno de ustedes sabe cómo hacer esto?

Realmente espero no tener que comprobar muchas extensiones a mano.

Gracias de antemano.

Respuesta

37

Necesitaba esto hace una semana:

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

Si funciono esto en las extensiones @ "php", @ "jpg", @ "html", y @ "TTF", imprime:

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

Simplemente no olvide que debido a que el nombre de la función tiene 'Create' en él, usted es responsable de 'liberar' el objeto. – Alex

+0

¡Gracias! Funcionó. Al principio tuve algunos problemas, pero fue porque no estaba recortando el espacio en blanco y los caracteres de nueva línea de las cadenas de ruta. (Los estoy leyendo desde una herramienta de línea de comandos.) –

+3

Lo necesitaba solo hoy. :-) Incluso es más claro si lo ajusta de la siguiente manera: 'NSString * uti = [NSMakeCollectable (UTTypeCreatePreferredIdentifierForTag (kUTTagClassFilenameExtension, (CFStringRef) [myFilePath pathExtension], NULL)) autorelease];' –

9

puede utilizar el terminal e invocar mdls que le da todo tipo de información sobre un determinado tipo de archivo incluyendo infecciones del tracto urinario.

mdls /myPath/to/myFile.ext 

mdls le mostrará la UTI asociado en kMDItemContentTypeTree (también es posible llamar a las MDL En la aplicación de cacao por cierto).

+0

esta es una buena información –

Cuestiones relacionadas