2009-09-26 2 views
8

まず、I found a couplejava specific questionsと答えます。私はより多くの "ネイティブ"を探していますが、C、C++、シェルスクリプト、または私の場合はQtを使用してクロスプラットフォームのソリューションを探しています。特定のファイルタイプに関連するアプリケーションを起動するための非Java、クロスプラットフォームの方法はありますか?

質問には、特定のファイルタイプに対してプログラムで関連アプリケーションを開くための標準のクロスプラットフォームの方法があります。少なくとも、関連するアプリケーションがあるかどうかを調べ、それらを見つけて起動できるかどうか

クロスプラットフォームとは、Windows、OSX、Linux(gnome/kde)のことです。ユースケースには、3つの異なるターゲットで読み取られるブロブとして格納されたファイルを持つデータベースがあります。

答えて

10

私はどのようなクロスプラットフォームの方法について知らない。

Windowsには、startコマンドがあり、関連するデフォルトアプリケーションが起動します。 (例えばstart foo.docは、デフォルトのWord文書エディタ、start http://StackOverflow.Com/デフォルトのWebブラウザとstart mailto:[email protected]デフォルトのメールアプリを起動します。)

をOS Xで同じことを行いopenコマンドがあります。

Linuxは単なるオペレーティングシステムカーネルです。 OSカーネルは、 "ファイルタイプ"や "MIMEタイプ"や "関連アプリケーション"などのことは知らない。したがって、このようなことは単には存在しません。 for Linux。

Freedesktopグループには、Freedesktop準拠のすべてのグラフィカルデスクトップ(Linux、FreeBSD、NetBSD、OpenBSD、DragonflyBSD、OpenSolarisなど)で動作するspecification for an xdg-open commandがあります。ただし、非フリーズデスクトップシステムで動作することは明らかに保証されておらず、確かにで、非グラフィカルシステムでは動作しません。

3つのケースでは、これはコマンドラインアプリケーションであり、CまたはC++ APIではなく、systemで明示的に呼び出すことができます。

+1

ありがとう、xdg-openは欠けていた部分でした。また、オペレーティングシステムのその味の一般的な用語として "Linux"の私の使用を許してください。私は誰もがそれがカーネルであることを知っていると思うが、何が意味されているかはまだ分かっている。 – FeatureCreep

+0

私はそのようなことについて少し賢明なことがあると知っていますが、私の意見では、このようなことについて正しいことが重要です。絶対に大部分のLinuxコンピュータ*はxdg-openをサポートしていません!私の携帯電話、DVDプレーヤー、ケーブルテレビデコーダ、HDDレコーダー、NASボックス、PDAはすべてLinuxを実行しますが、どれも 'xdg-open'を持っていません。また、地球上のTiVoと、ほとんどすべてのWiFiまたはブロードバンドルータはLinuxを実行し、いずれも 'xdg-open'を持っていません。 OTOH、多くのFreeBSD、NetBSD、... Linuxは*実行していない* XDG準拠の*デスクトップ*は 'xdg-open'を持っています。 –

+1

それでは、Freedesktopの仕様とは関係があり、Linuxとは関係ありません。 –

1

例えば、Cのシステムコールがあります:

system("main.cpp"); 

はこれが(私の場合はVisual Studioの)デフォルトのエディタを使用してファイルを開きます。私はLinuxとMacについては分かりませんが、そこに "open main.cpp"を書く必要があるかもしれません(これは#ifdef構造で扱うことができます)。

+1

これはウィンドウズ(あなたのテスト)とマック(私はそれをテストしたばかりです)で動作します。 Linuxの亜種がある場合、これは私が推測する答えになります。私は私のosxと私のLinuxボックスでシステム( "bla.txt")を試してみましたが、動作しませんでしたが、 "open bla.txt"と私のMacで働いていました。 – FeatureCreep

4

あなたはQtを使用していることに気づいたので、QDesktopServicesクラス、特にopenUrl(QUrl)メソッドを言及する価値があります。 Qtでサポートされているすべてのプラットフォームで説明したことはほとんどありません。

+0

ありがとう、このソリューションは実際には私の特定の問題を "システム(...)"ソリューションよりも優れていますが、おそらくより一般的です。 – FeatureCreep

関連する問題