如何确定文件的文件类型(文档类型/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)的主要内容,如果未能解决你的问题,请参考以下文章

如何指定用于导入 .obj 文件的文件类型?

如何使用 Xcode 11 在 UTI 部分配置 .app 文件?

检查 NSURL 的 UTI / 文件类型

在 iOS 中为 mime 类型或 UTI 类型使用内置图标

获取给定文件的文件类型 - 基于内容

带有 UIDocumentPickerViewController 的 iOS 自定义 UTI/文件类型