2016-10-12 4 views
0

実行時に "./"の作業ディレクトリをどのように指定できるか混乱します。 プロジェクトファイルのディレクトリになることがあります。実行ファイルのディレクトリであることもあります。すべての扶養家族はあなたがプログラムをどのように実行するのか。クロスプラットフォームに基づいてC++で実行時に作業ディレクトリを指定する方法は?

この作業ディレクトリを「./」として指定する方法は、常にそうしたいと思いますか?私は、例えば実行ファイルのディレクトリを常にそのままにしたいという意味です。 そして、この実装はプラットフォームに依存しないはずです(私はかなり難しいと思いますので、不可能な場合は無視してください)。

+0

問題は、すべてのプラットフォームにファイルシステムがあるわけではないということです。ファイルシステムをサポートする必要はありません。多くの組み込みシステムにはファイルシステムがありません。また、 "../"表記を使用せず、他の表記を使用してファイルをフォルダから分離するファイルシステムもあります。 –

+1

ディレクトリについてはどうしますか?プログラムディレクトリにデータファイルを格納することは、すべてのシステムで許可されない場合があります。また、完全にクロスプラットフォームであるためには、OSにディレクトリがあると仮定することさえできません。 –

+0

@ThomasMatthewsああ、申し訳ありませんが、私は組み込みシステムを意味しませんでした。実際には、私はちょうどLinuxとwin32プラットフォームの両方で実装を尋ねたいと思っています。 –

答えて

0

あなたはfilesystem技術仕様や、私がキャッチすべての方法を知らないしかし、あなたはすぐに-に-こと標準のファイルシステムライブラリ

新しいを使用することができますC++17コンパイラをサポートしてコンパイラを使用している場合実行可能ディレクトリを検出します。私はWindowsLinuxに動作するはずだと思う一つの方法は、起動コマンドが含まれているargv[0]を使用し、その正規のパスを見つけることです:

std::error_code ec; 

    // find the executable directory 
    auto exe_folder = fs::canonical(fs::path(argv[0]), ec).parent_path(); 

    // set the current directory to the executable directory 
    fs::current_path(exe_folder); 

現在GCC v6技術仕様そうでなければ、また、使用することができますようファイルシステムを持っていますboost::filesystemをベースにしています。

通常、プログラムには、実行可能ファイルを含むディレクトリへの書き込み権限がありません。

+0

O.o C++ 17? thnx、それは私が見つけた解決策よりもずっときれいに見える。 –

0

誰かが興味を持っている場合は、自分自身で解決策を見つけました。最初にコンピュータにQtをインストールする必要があります。 QDir :: setCurrent(qApp-> applicationDirPath()); 実行ディレクトリで作業ディレクトリを変更することができます。

これにより、実行時の作業ディレクトリが実行ファイルの作業ディレクトリに変更されます。

しかし、あなたはQtを持っていなければならないので非常にきれいに見えません。

0

私は(C++ 17コンパイラを必要とせずに)最高の解決策は、データ駆動型ファイルが実行可能ファイルの隣にあることを保証できる場合、あなたのプロジェクトディレクトリ。

"./[your file] .txt"は常に存在するため、これらのファイルの内容を現在の作業ディレクトリの場所として使用できます。

関連する問題