代码之家  ›  专栏  ›  技术社区  ›  FeatureCreep

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

  •  8
  • FeatureCreep  · 技术社区  · 17 年前

    第一, I found a couple 属于 java specific questions 以及答案。我正在寻找更多的“原生”,但跨平台的解决方案,使用C,C++,某种shell脚本,或者,在我的例子中,Qt。

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

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

    3 回复  |  直到 9 年前
        1
  •  10
  •   Jörg W Mittag    9 年前

    我不知道有什么跨站台的路。

    在窗户里,有 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或其他)。但是,它显然不能保证在非自由桌面系统上工作,而且 当然 不能保证在非图形系统上工作。

    在这三种情况下,这都是一个命令行应用程序,而不是一个c或c++api,但显然可以通过 system .

        2
  •  4
  •   IgKh    17 年前

    既然您已经注意到您正在使用qt,那么值得一提的是 QDesktopServices 班级,尤其是 openUrl(QUrl) 方法。它在qt支持的所有平台上都能完成您所描述的功能。

        3
  •  1
  •   StackedCrooked    17 年前

    C中有系统调用,例如:

    system("main.cpp");
    

    这将使用默认编辑器(在我的例子中是visual studio)打开文件。我不确定Linux和Mac,你可能需要在那里写“打开Meal.CPP”(这可以由Y-IFDEF构造来处理)。