【问题标题】:Is there a non-java, cross platform way to launch the associated application for a certain file type?是否有一种非 java、跨平台的方式来启动特定文件类型的关联应用程序?
【发布时间】:2009-09-26 10:44:26
【问题描述】:

首先,I found a couplejava specific questions 和答案。我正在寻找更多“原生”但跨平台的解决方案,使用 C、C++、某种 shell 脚本,或者就我而言,使用 Qt。

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

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

【问题讨论】:

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


    【解决方案1】:

    我不知道有什么跨平台的方式。

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

    在 OS X 中有 open 命令,它做同样的事情。

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

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

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

    【讨论】:

    • 谢谢,xdg-open 是缺少的部分。另外,请原谅我将“linux”用作那种操作系统的通用术语。我想这里的每个人都知道它是一个内核,但仍然理解它的含义。
    • 我知道我对这些事情可能有点迂腐,但在我看来,正确对待这些事情很重要:绝对绝大多数 Linux 计算机没有 i> 支持xdg-open!我的手机、DVD播放器、有线电视解码器、硬盘录像机、NAS盒子和PDA都运行Linux,但没有一个有xdg-open。此外,地球上的每一个 TiVo,几乎每一个 WiFi 或宽带路由器都运行 Linux,但它们都没有xdg-open。 OTOH,许多 FreeBSD、NetBSD、... 桌面, 运行 Linux 但符合 XDGxdg-open
    • 所以,它确实与 Freedesktop 规范有关,与 Linux 无关。
    • 是的,我知道您的回答是指freedesktop,我认为您的回答很清楚,写得很好。不过,考虑到上下文,我不认为许多阅读 question 的人会认为“linux”一词的字面意思是 linux 内核,而是作为一种操作风格的指针系统。至少我和我认识的许多人每天都是这样使用这个词的。
    【解决方案2】:

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

    【讨论】:

    • 谢谢,这个解决方案实际上比“system(...)”解决方案更适合我的特定问题,尽管那个解决方案可能更通用。
    【解决方案3】:

    C中有系统调用,例如:

    system("main.cpp");
    

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

    【讨论】:

    • 好的,所以这适用于 windows(您的测试)和 mac(我刚刚测试过)。如果有 linux 变体,那么我猜这就是答案。我在我的 osx 和我的 linux 机器上尝试了系统(“bla.txt”),但它没有工作,但使用“open bla.txt”它在我的 mac 上工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2016-06-24
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 2010-11-10
    • 2019-07-23
    相关资源
    最近更新 更多