9

まず、これに関するJava 固有の質問と回答をいくつか見つけました。C、C ++、ある種のシェルスクリプト、または私の場合はQtを使用して、より「ネイティブ」ですがクロスプラットフォームソリューションを探しています。

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

クロスプラットフォームとは、Windows、OSX、および Linux (gnome/kde) を意味します。ユース ケースは、3 つの異なるターゲットで読み取られる BLOB として格納されたファイルを含むデータベースを使用することです。

4

3 に答える 3

12

クロスプラットフォームの方法は知りません。

Windows にはstart、関連するデフォルト アプリケーションを起動するコマンドがあります。(たとえばstart foo.doc、既定の Word ドキュメント エディター、start http://StackOverflow.Com/既定の Web ブラウザー、およびstart mailto:mail@example.com既定のメール アプリが起動します。)

OS X にはopen、同じことを行うコマンドがあります。

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

Freedesktop Group には、すべての Freedesktop 準拠のグラフィカル デスクトップ (Linux、FreeBSD、NetBSD、OpenBSD、DragonflyBSD、OpenSolaris など) で動作するコマンドの仕様があります。xdg-openただし、Freedesktop 以外のシステムでの動作が保証されていないことは明らかであり、非グラフィカル システムでの動作も保証されていません

3 つのケースすべてにおいて、これはコマンド ライン アプリケーションであり、C または C++ API ではありませんが、明らかに 経由で呼び出すことができますsystem

于 2009-09-26T18:50:27.710 に答える
5

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

于 2009-09-27T12:20:26.883 に答える
1

Cにはシステムコールがあります。次に例を示します。

system("main.cpp");

これにより、デフォルトのエディター(私の場合はVisual Studio)を使用してファイルが開きます。LinuxとMacについてはよくわかりませんが、そこに「open main.cpp」と書く必要があるかもしれません(これは#ifdefコンストラクトで処理できます)。

于 2009-09-26T13:05:30.403 に答える