std::ifstream::open() に関していくつかの質問があったことは知っていますが、その答えは私の問題を解決しませんでした。それらのほとんどは Win32 に固有のものであり、私は SDL を使用しており、OS 固有の機能には触れていません (... SDL にラップされていません)。
問題は次のとおりです: std::ifstream::open() は、Dev-C++ から Code::Blocks に切り替えたため、もう機能していないようです (両方で同じ MinGW-GCC バックエンドを使用しています)。 )、および Windows XP から Vista へ。(OS X / xcode (GCC バックエンド) でも完全に動作します。)
私のプロジェクトは、#include <string>、<iostream>、<fstream>、および <cassert> を含む静的ライブラリに対してリンクし、静的ライブラリで定義された機能への呼び出しが行われ、std::ifstream::open が呼び出されます。 () (今回は直接)。これに続いて、ストリームは false と評価されます (暗黙の bool 変換演算子と good() メソッドの両方を使用)。
コード:
#include "myStaticLibrary.hpp"
int main(int argc, char **argv)
{
std::string filename("D:/My projects/Test/test.cfg");
std::cout << "opening '" << filename << "'..." << std::endl;
bool success(false);
// call to functionality in the static library
{
std::ifstream infile(filename.c_str());
success = infile.good();
// ...
}
// success == false;
// ...
return 0;
}
stdout.txt 言います:
「D:/マイ プロジェクト/Test/test.cfg」を開いています...
stdout.txt を開いて、ファイル名を含むパスを [スタート] メニューの [ファイル名を指定して実行] にコピー アンド ペーストすると、ファイルが正常に開かれます (ただし、これがどの程度の診断値であるかは完全にはわかりません。また、アドレスは次の形式に変換されます: file:///D:/My%20projects/test/test.cfg)。
また、「/」を二重のバックスラッシュ エスケープ シーケンスに置き換えてみましたが (これも、以前はスラッシュが正常に機能していました)、結果は同じでした。
これはデバッグ バージョンですが、main() の argv[0] から取得した絶対パス全体を使用しています。
どこで問題が発生し、それを修正するにはどうすればよいですか?