获取给定扩展的统一类型标识符

Mar*_*lio 19 macos cocoa objective-c uti

我试图在Cocoa中找到一些方法来从文件扩展名转换为统一类型标识符.也就是说,我想找到一些方法:

".jpg" => "public.jpeg"
".html" => "public.html" 
".ttf"=> "public.truetype-font"
Run Code Online (Sandbox Code Playgroud)

我搜索过NSWorkspace文档但找不到任何内容.我能得到的最接近的是:

- (NSImage *)iconForFileType:(NSString *)fileType
Run Code Online (Sandbox Code Playgroud)

返回文件扩展名的图标,和

– (NSString *)preferredFilenameExtensionForType:(NSString *)typeName
Run Code Online (Sandbox Code Playgroud)

这与我正在尝试的完全相反.你们中的任何人都知道怎么做吗?

我真的希望我不必手动检查很多扩展.

提前致谢.

Dav*_*ong 40

大约一周前我需要这个:

NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, 
                                                                   (CFStringRef)[myFilePath pathExtension], 
                                                                   NULL);
Run Code Online (Sandbox Code Playgroud)

如果我在扩展@"php",@"jpg",@"html"和@"ttf"上运行它,它会打印:

public.php-script
public.jpeg
public.html
public.truetype-ttf-font
Run Code Online (Sandbox Code Playgroud)

  • 只是不要忘记,因为函数名称中有"Create",你负责"释放"对象. (9认同)
  • 您应该知道,为了使此代码段能够在iOS上运行,您必须`#import <MobileCoreServices/MobileCoreServices.h>` (6认同)
  • 我今天就需要这个.:-)如果你像这样包装它甚至更干净:`NSString*uti = [NSMakeCollectable(UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,(CFStringRef)[myFilePath pathExtension],NULL))autorelease];` (3认同)

auc*_*uco 12

您可以使用终端并调用mdls,它提供有关特定文件类型(包括UTI)的各种信息.

mdls /myPath/to/myFile.ext
Run Code Online (Sandbox Code Playgroud)

然后mdls会在kMDItemContentTypeTree中显示相关的UTI(也可以从你的Cocoa App btw中调用mdls).