我正在尝试在Cocoa中找到一些方法来将文件扩展名转换为统一类型标识符。也就是说,我想要找到一些方法来做到这一点:
".jpg" => "public.jpeg"
".html" => "public.html"
".ttf"=> "public.truetype-font"
我搜索了NSWorkspace文档,但什么也找不到。我能得到的最接近的是:
- (NSImage *)iconForFileType:(NSString *)fileType
返回文件扩展名的图标,并且
– (NSString *)preferredFilenameExtensionForType:(NSString *)typeName
这与我想要做的事情完全相反。你们有人知道怎么做吗?
我真的希望我不需要手动检查很多扩展。
提前谢谢。
发布于 2009-10-01 20:42:04
大约一周前我需要这个:
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
(CFStringRef)[myFilePath pathExtension],
NULL);
如果我在扩展名@"php“、@"jpg”、@"html“和@"ttf”上运行此命令,它将输出:
public.php-script
public.jpeg
public.html
public.truetype-ttf-font
多年后的更新11+
在Swift中,有两种方法可以完成此操作,具体取决于您的部署目标:
让fileExtension = "html“让unmanagedString = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension作为CFString,fileExtension作为CFString,nil)让typeIdentifier = unmanagedString?.takeRetainedValue()作为字符串?
UTTypeCreatePreferredIdentifierForTag()
函数(仍然是CoreServices
模块的一部分)返回一个Unmanaged<CFString>?
;这是一种对CFString
进行装箱的类型,您需要指示(通过.take...
方法之一)内存管理语义应该是什么。
由于该函数遵循the Create Rule命名模式,因此它将向我们返回一个我们需要取得所有权的CFString
。因此,我们使用.takeRetainedValue()
将CFString
的所有权从手动内存管理领域转移到ARC领域。
然后在String
和CFString
之间需要进行大量的桥接。
UniformTypeIdentifiers
模块,使这一切变得非常简单:让fileExtension) =“fileExtension”让typeIdentifier = UTType(filenameExtension: html
发布于 2012-01-01 23:17:42
您可以使用终端并调用mdls,它为您提供了有关特定文件类型的各种信息,包括UTI。
mdls /myPath/to/myFile.ext
然后,mdls将在kMDItemContentTypeTree中显示相关的UTI(也可以从Cocoa App btw中调用mdls )。
https://stackoverflow.com/questions/1506251
复制相似问题