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

Fea*_*eep 9 c++ scripting qt cross-platform launch

首先,我发现了几个特定java的问题和答案.我正在寻找更多"本机",但跨平台的解决方案,使用C,C++,某种shell脚本,或者在我的情况下,Qt.

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

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

Jör*_*tag 11

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

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

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

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

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

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

  • 是的,我知道您的回答是指freedesktop,我认为您的回复清晰且写得很好.虽然根据上下文,我认为很多读过_question_的人都不会认为"linux"这个词用来表示linux内核,而是指向一种操作系统的指针.这至少是我和我认识的很多人每天使用这个词的方式. (3认同)

小智 5

既然您已经注意到您正在使用Qt,那么值得一提的是QDesktopServices类,尤其是openUrl(QUrl)方法。它几乎可以完成您在Qt支持的所有平台上描述的内容。