質問

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

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

スニペット:

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 などを使用して、正確なエラーを見つけるにはどうすればよいですか?

役に立ちましたか?

解決

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

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

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

他のヒント

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

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

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

ロジャーペイトさんのコメントます:

  

"./filename"は(./を仮定しても、必要とされていない)は、WindowsとLinux間で移植で使用して、問題がCWDが、彼はそれがにもかかわらず、である考えるものではないことが考えられます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top