首先,我为此找到了几个Java 特定的问题和答案。我正在寻找更多“原生”但跨平台的解决方案,使用 C、C++、某种 shell 脚本,或者就我而言,使用 Qt。
所以问题是,是否有标准的、跨平台的、以编程方式打开某些文件类型的关联应用程序的方法。或者至少要找出是否有相关的应用程序并能够找到并启动它们?
我所说的跨平台是指 Windows、OSX 和 linux (gnome/kde)。用例是有一个数据库,其中存储的文件作为 blob 将在三个不同的目标上读取。
首先,我为此找到了几个Java 特定的问题和答案。我正在寻找更多“原生”但跨平台的解决方案,使用 C、C++、某种 shell 脚本,或者就我而言,使用 Qt。
所以问题是,是否有标准的、跨平台的、以编程方式打开某些文件类型的关联应用程序的方法。或者至少要找出是否有相关的应用程序并能够找到并启动它们?
我所说的跨平台是指 Windows、OSX 和 linux (gnome/kde)。用例是有一个数据库,其中存储的文件作为 blob 将在三个不同的目标上读取。
我不知道任何跨平台的方式。
在 Windows 中,有一个start
命令,它将启动相关的默认应用程序。(例如start foo.doc
,将启动默认的 Word 文档编辑器、start http://StackOverflow.Com/
默认的 Web 浏览器和start mailto:mail@example.com
默认的邮件应用程序。)
在 OS X 中有一个open
命令,它做同样的事情。
Linux 只是一个操作系统内核。操作系统内核对“文件类型”或“MIME 类型”或“关联应用程序”或类似的东西一无所知。因此,对于 Linux来说,这样的事情根本不存在。
Freedesktop 组有一个command规范xdg-open
,它适用于所有符合 Freedesktop 的图形桌面(无论是 Linux、FreeBSD、NetBSD、OpenBSD、DragonflyBSD、OpenSolaris 还是其他)。但是,显然不能保证在非 Freedesktop 系统上工作,当然也不能保证在非图形系统上工作。
在这三种情况下,这是一个命令行应用程序,而不是 C 或 C++ API,但您显然可以通过system
.
由于您已经注意到您正在使用 Qt,因此值得一提的是QDesktopServices类,尤其是openUrl(QUrl)方法。它几乎可以在 Qt 支持的所有平台上完成您所描述的工作。
C中有系统调用,例如:
system("main.cpp");
这将使用默认编辑器(在我的情况下为 Visual Studio)打开文件。我不确定 Linux 和 Mac,你可能需要在那里写“open main.cpp”(这可以通过#ifdef 结构来处理)。