3

ファイル名 (現在のディレクトリに相対的) の行を含む構成ファイルを使用して、コンソール プログラムを Qt に移植しています。QtCreator で GUI を実行/デバッグすると、作業ディレクトリからファイルをロードできないようです。

私のファイルシステムを次のように仮定します:

C:/MyProjectSource
C:/MyProjectSource-Desktop-Debug // <-- created by QtCreator
C:/MyProjectSource-Desktop-Debug/debug/MyProgram.exe // <- my program
C:/MyProjectSource-Desktop-Debug/debug/params.txt    // <- program's config
C:/MyProjectSource-Desktop-Debug/debug/cfg/file1.txt // <- extra file
C:/MyProjectSource-Desktop-Debug/debug/cfg/file2.txt // <- extra file

params.txtは次のようになります

# other setting    
...
cfg/file1.txt      # at this line, program crash, saying cannot open file
cfg/file2.txt
...
# other setting    

file1.txt を読み取るためのコード

std::ifstream ifs(filename); // <-- @runtime, filename = 'cfg/file1.txt'
if (!ifs)
{
    // failed inside QtCreator, but fine when start from explorer
    EMSG_OPENFILE(filename);
    exit(-1);
}

ベースライン: 可能であれば、コンソール プログラムに変更はありません。では、QtCreator に相対パスを理解させるにはどうすればよいでしょうか? または、params.txt内に絶対パスを強制する必要がありますか? ありがとう。

プラットフォーム: QtCreator 2.6.1、Qt4.8、MinGW64、Win 7

4

1 に答える 1

5

相対パスは、実行可能ファイルが保存されているディレクトリではなく、現在の作業ディレクトリに対して相対的であるため、現在の作業ディレクトリを実行可能ディレクトリに変更する必要があります。メイン関数の後に次の行を追加するだけです。

QDir::setCurrent(QCoreApplication::applicationDirPath());

Qt Creator から現在の作業ディレクトリを設定する必要がある場合: [プロジェクト] -> [実行] -> [作業ディレクトリ] テキスト ボックスが表示されます。

ここに画像の説明を入力

次に、このパスを参照ボタンから実行可能な場所に変更します

于 2013-02-20T09:26:45.923 に答える