1

私はゲームのプロトタイプを開発しています。ゲームデザイナーが再コンパイルに加えて私からの助けを必要とせずにゲームパラメーターを微調整できるように、特定のゲームプレイルールをiniファイルで定義する必要があります。これは私が現在行っていることです:

std::ifstream stream;
stream.open("rules.ini");

if (!stream.is_open())
{
    throw new std::exception("Rule file could not be opened");
}

// read file contents here

stream.close();

ただし、ストリームが正常に開くことはありません。デバッグ中にSTLソースを深く掘り下げると、_getstream()(stream.cで定義されている)がNULLを返し続けることがわかりますが、これがなぜであるかはわかりません。助けて、誰か?

編集:Rules.iniは.exeファイルと同じディレクトリにあります。

4

3 に答える 3

8

作業ディレクトリが実行可能ファイルが存在するディレクトリであると想定しています。これは悪い想定です。

実行可能ファイルは任意の作業ディレクトリから実行できるため、通常、ソフトウェアに相対パスをハードコードすることはお勧めできません。

実行可能ファイルの場所に関連するファイルにアクセスできるようにする場合は、最初に実行可能ファイルのパスを決定し、そこから完全修飾パスを作成する必要があります。

argv[0]に渡されたパラメータを調べることで、実行可能ファイルの名前を取得できますmain()。または、Windows を使用している場合はGetModuleFileName()、最初のパラメーターとして NULL を渡すことで取得できます。

于 2008-12-11T00:37:14.167 に答える
2

オープンストリームの範囲は正しいですか。

「rules.ini」はフルパスではないため、相対パスである必要があるため、相対パスは何ですか。または、そこでフルパスを使用する必要がありますか。

于 2008-12-10T23:21:49.267 に答える
0

(ここではワイルドな仮定)ビジュアルスタジオを使用しています。デバッグ中、プログラムはプロジェクト ディレクトリで「rules.ini」を検索します。

ただし、「myproject/debug/myexe.exe」からプログラムを実行しようとすると、「/debug」で rules.ini を検索するため、正常に実行されるはずです。

言及されているように、相対パスはエラーにつながる傾向があるため、フルパスを指定する必要があります

于 2008-12-11T01:02:28.533 に答える