0

C++ プログラムでロードしたい単純なデータ ファイルがあります。奇妙な理由で、それは機能しません:

  • ファイルが同じディレクトリにあると仮定して、Windowsで試してみました: failed
  • ファイルを C:\ directory: working に移動して、Windows で試してみまし
  • Linux でファイルを同じディレクトリに置いてみました: failed

スニペット:

void World::loadMap(string inFileName) {
  ifstream file(inFileName.c_str(), ios::in);
  if (file) {
  }
  else 
  {
    cout<<"Error when loading the file \n";
    exit(-1);
  }
}

次のように loadMap メソッドを呼び出します。

World::Instance()->loadMap("Map.dat");

(ワールドはシングルトン クラスです)。

try-catch などを使用して正確なエラーを見つけるにはどうすればよいですか?

4

4 に答える 4

2

デフォルトでは、ファイルを開く (またはその他の I/O 操作) に失敗しても、例外は発生しません。この動作は変更できますが、標準では、失敗の正確な理由を例外から抽出する手段はまだ提供されていません。

于 2010-01-03T13:41:44.820 に答える
1

問題は作業ディレクトリです。

ファイルの相対パスを指定すると、作業ディレクトリが使用されます(これは、アプリケーションがファイルシステムに保存されているディレクトリとは異なる場合があります)。

  • したがって、絶対パスを使用する必要があります。
  • または、現在の作業ディレクトリを見つけて、それに関連するファイルを指定する必要があります。
  • または、現在の作業ディレクトリを変更します。
于 2010-01-03T17:59:46.090 に答える
1

ロジャー・ペイトのコメント:

Windows と Linux 間での使用"./filename"(./想定されており、必須ではありません) は移植可能ですが、問題は、CWD が彼が考えているものではないことかもしれません。

于 2010-01-03T15:44:41.430 に答える
1

Linux のファイル名は大文字と小文字が区別されます。
あなたのファイルは実際に名前が付けられていmap.datますか?

また、ファイルを現在のディレクトリに置いてみましたか?

于 2010-01-03T13:42:18.667 に答える