是否有非Java,跨平台的方式来启动某个文件类型的关联应用程序?

时间:2009-09-26 10:44:27

标签: c++ qt scripting cross-platform launch

首先,I found a couplejava specific questions并为此提供答案。我正在寻找更多“本机”,但跨平台的解决方案,使用C,C ++,某种shell脚本,或者在我的情况下,Qt。

所以问题是,是否存在标准的跨平台方法,以编程方式打开某些文件类型的关联应用程序。或者至少要找出是否有关联的应用程序,并能够找到并启动它们?

跨平台我指的是Windows,OSX和linux(gnome / kde)。该用例是一个数据库,其中存储的文件为blob,将在三个不同的目标上读取。

3 个答案:

答案 0 :(得分:10)

我不知道任何跨平台的方式。

在Windows中,有start命令,它将启动关联的默认应用程序。 (例如start foo.doc将启动默认的Word文档编辑器,start http://StackOverflow.Com/默认的Web浏览器和start mailto:mail@example.com默认的邮件应用程序。)

在OS X中有open命令,它执行相同的操作。

Linux只是一个操作系统内核。操作系统内核对“文件类型”或“MIME类型”或“关联应用程序”或类似内容一无所知。因此,对于Linux来说,这样的事情就不存在

Freedesktop Group有一个specification for an xdg-open command,适用于所有符合Freedesktop标准的图形桌面(无论是Linux,FreeBSD,NetBSD,OpenBSD,DragonflyBSD,OpenSolaris还是其他)。但是,显然不能保证在非Freedesktop系统上工作,并且肯定无法保证在非图形系统上工作。

在所有三种情况下,这是一个命令行应用程序,而不是C或C ++ API,但您显然可以通过system调用它。

答案 1 :(得分:4)

由于您已注意到您使用的是Qt,因此值得一提的是QDesktopServices类,尤其是openUrl(QUrl)方法。它几乎完全是你在Qt支持的所有平台上描述的内容。

答案 2 :(得分:1)

在C中有系统调用,例如:

system("main.cpp");

这将使用默认编辑器(在我的情况下为Visual Studio)打开文件。我不确定Linux和Mac,你可能需要在那里写“open main.cpp”(可以通过#ifdef构造来处理)。

相关问题