我不知道任何跨平台的方法。
在Windows中,有一个start
命令,它将启动关联的默认应用程序。(例如,start foo.doc
将启动默认的Word文档编辑器,start http://StackOverflow.Com/
将启动默认的Web浏览器,而start mailto:mail@example.com
则启动默认的邮件应用程序。)
在OS X中,有open
命令,也是做同样的事情。
Linux只是一个操作系统内核。操作系统内核并不知道任何关于“文件类型”、“MIME类型”或“相关应用程序”之类的东西。因此,这样的东西在Linux上根本是不存在的。
Freedesktop组有一个规范的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结构来处理)。
xdg-open
!我的手机、DVD 播放器、有线电视解码器、硬盘录像机、NAS 盒子和 PDA 都运行着 Linux,但它们中没有一个有xdg-open
。此外,全球的每一台 TiVo 和几乎所有 WiFi 或宽带路由器都运行着 Linux,但它们中也没有一个有xdg-open
。另一方面,许多 FreeBSD、NetBSD 等桌面系统,虽然不是运行 Linux 但符合 XDG 标准,它们是有xdg-open
的。 - Jörg W Mittag