0

ファイルを読み込もうとしていますが、以前はハードコードされたファイルの場所 (「c:\location\file.txt」など) を使用していましたが、今では数人の友人もファイルを使用しているため、許可したいと思います。実行可能ファイルを好きな場所に配置します。

私の現在のコードは次のようになります:

ifstream myfile;
myfile.open("c:\\client\\settings.cfg");

ユーザーが実行可能ファイルを必要なフォルダーに配置し、フォルダーを作成して設定ファイルをその中に配置すると、exeが設定と共にそれをロードするように変更しようとしています。

ifstream myfile;
myfile.open("\\settings\\settings.cfg");

私はいくつかの基本的なエラー処理を行っていますが、プログラムは常にファイルが見つからないというエラーを出します。

ファイル構造は次のようになります。

[ART]
  asset.png
[SETTINGS]
  settings.cfg
client.exe

これは本当に簡単なことのように思えますが、それを行う方法が見つかりません。ファイルの読み取りと書き込みに関するすべての例とチュートリアルは、実行可能ファイルのディレクトリ内のファイル、または c:\folder にハードコードされたファイルのみを扱います...

誰かが私にこれを行う方法を教えてもらえますか?

4

2 に答える 2

5

ほとんどのシステムの検索パスは、現在の作業ディレクトリから始まり、PATH環境変数へと続きます。したがって、絶対パスのマークを付けずにファイル/フォルダーを指定するだけで、作業ディレクトリからの相対パスが使用されます。

ifstream myfile;
myfile.open("settings\\settings.cfg");
//           ^^ Note the lack of \\ to start the file path
于 2013-11-04T03:16:15.797 に答える
3

で始まるパス\は常に、現在のドライブのルート ディレクトリからの相対パスです。現在のドライブが の場合、 はC:\settings\settings.cfg意味しC:\settings\settings.cfgます。

/すべてをエスケープすることを避けるために使用できることに注意してください。したがって、次を使用できますsettings/settings.cfg。これは、ユーザーの現在のディレクトリに相対的になります。ただし、これは実行可能ファイルが存在するディレクトリに必ずしも対応していないことに注意してください。実行可能ファイルのディレクトリが必要な場合は、Windows API 関数を使用して取得する必要があります。

#include <Windows.h>
// ...

HMODULE module = GetModuleHandleW(NULL);
WCHAR path[MAX_PATH];
GetModuleFileNameW(module, path, MAX_PATH);

実行可能ファイルのディレクトリに対して相対的に開きたい場合はsettings/settings.cfg、で始まるパスを作成してそれpathに追加/settings/settings.cfgします。

于 2013-11-04T03:16:35.957 に答える