首先,I found a couple的java specific questions并为此提供答案。我正在寻找更多“本机”,但跨平台的解决方案,使用C,C ++,某种shell脚本,或者在我的情况下,Qt。
所以问题是,是否存在标准的跨平台方法,以编程方式打开某些文件类型的关联应用程序。或者至少要找出是否有关联的应用程序,并能够找到并启动它们?
跨平台我指的是Windows,OSX和linux(gnome / kde)。该用例是一个数据库,其中存储的文件为blob,将在三个不同的目标上读取。
答案 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构造来处理)。