如何确定文件的文件类型(文档类型/UTI)
Posted
技术标签:
【中文标题】如何确定文件的文件类型(文档类型/UTI)【英文标题】:How do I figure out the file type (document type / UTI) of a file 【发布时间】:2015-06-29 01:36:44 【问题描述】:我正在开发一个文档应用程序。我的文档实际上是一个可以容纳其他任意文档的包。加载文档后,我可以使用 NSFileWrapper API 获取所有这些文件的句柄。我想知道这些 NSFileWrapper 对象代表什么样的文件,所以我知道如何在我的应用程序中显示它。它是文本文件、图像还是二进制文件?
有没有办法获取 NSFileWrapper 的 UTI?我确实在来自 AppKit 的 NSFileWrapper 上找到了一个“图标”属性。所以他们必须有某种方式知道文件是什么才能查找其图标。
【问题讨论】:
也许这会引导你走向正确的方向:***.com/questions/5814463/… 很好,这就是我想要的。谢谢。移动到答案? 【参考方案1】:您可以向NSWorkspace
询问任何文件的UTI:
import Cocoa
let documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
.UserDomainMask, true)[0] as! String
let documentPath = documents.stringByAppendingPathComponent("test.pages")
// test.pages will need to exist on the filesystem
NSWorkspace.sharedWorkspace().typeOfFile(documentPath, error: nil)
// com.apple.iwork.pages.sffpages
我不确定它有多可靠,或者如果有多个应用程序能够打开同一个文件会发生什么。
文档鼓励检查NSError
,但没有说明可能会发生什么错误。
【讨论】:
谢谢,这看起来是个不错的解决方案。由于我正在使用 NSFileWrappers,我不认为我拥有使用此 API 的完整路径。所以上面评论中的 UTI 函数似乎更适合我的任务。 @darren 我很确定它是 only 解决方案,所以你必须找到一种方法让它发挥作用。如果您有一个 NSDocument ,则可以使用它来确定文件包装器的 URL/路径。或者,您可以在 /tmp 中创建一个与文件包装器同名的文件或文件夹,然后询问 NSWorkspace 它是什么类型。以上是关于如何确定文件的文件类型(文档类型/UTI)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Xcode 11 在 UTI 部分配置 .app 文件?