【问题标题】:Cross-platform way to get user friendly file type description获取用户友好的文件类型描述的跨平台方式
【发布时间】:2012-10-04 19:45:45
【问题描述】:

获取用户友好的文件描述的跨平台方法是什么?

例子:

  1. foo.pdf -> "可移植文档格式 (PDF)
  2. bar.doc -> "Microsoft Word 文档"

非常感谢指向库或适当系统 API 的指针。

首选 Qt/C++ 解决方案,但一切都很好。

目标平台是 Windows 和 Mac OS X。如果可能的话,我希望描述与在 Explorer 或 Finder 中找到的内容相匹配(而不是自己维护扩展映射 -> 描述)。

【问题讨论】:

  • 您将 PDF 存储为 .txt?

标签: c++ windows macos qt


【解决方案1】:

GNU File 命令是为 Linux 和 OSX 内置的,并且有一个适用于 Windows 的版本 (http://gnuwin32.sourceforge.net/packages/file.htm)。

File 测试每个参数以尝试对其进行分类。有三种 测试集,按以下顺序执行:文件系统测试,幻数 测试和语言测试。第一个成功的测试导致 要打印的文件类型。打印的类型通常包含以下之一 文字文本(该文件仅包含打印字符和一些 常见的控制字符,并且在 ASCII 上阅读可能是安全的 终端),可执行文件(文件包含编译结果 程序以某些 UNIX 内核或其他内核可以理解的形式),或 数据意味着其他任何东西(数据通常是“二进制”或 不可打印)。众所周知的文件格式(核心文件、 tar 档案)已知包含二进制数据。

您可以使用 QProcess 调用文件命令并显示返回的信息。

输出看起来像:

$ file document.pdf
document.pdf: PDF document, version 1.5
$ file test.txt
test.txt: ASCII text, with CRLF, CR, LF line terminators

【讨论】:

  • 看起来很棒,甚至还有来源,这样我就可以避免炮轰了。也就是说,它与系统产生的内容并不完全匹配。任何知道是否有任何相应的系统 API 的 WinProgramming/Cocoa 大师?
【解决方案2】:

我认为你可以从 Qt 中得到的最接近的是QFileInfo

Windows 通过可通过 Qt 的QSettings 访问的注册表跟踪映射。但仅从brief research 看来,模仿 Explorer 的映射可能有点棘手。

您还可以使用QDesktopServices::openUrl() 使用默认处理程序启动文件。

我还没有研究过 OSX 如何或在何处跟踪文件类型描述信息。

希望对您有所帮助。

【讨论】:

  • 是的,我之前看过 QFileInfo。它似乎提供了所有元数据,如大小、组、所有者等,以及 isBundle 之类的好东西。也就是说,它并没有我真正需要的东西。注册表确实看起来超级hacky。我主要想做显示而不是启动可执行文件。
  • 我认为要获得与资源管理器相同的外观,您需要服药并深入了解 Windows 如何回忆这些描述的兔子洞。然后去为 Mac 做同样的事情。然后将您的代码作为 QFileInfo 的功能请求发布到 qt-project 上!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
相关资源
最近更新 更多