この単純なプログラムは、ifstreamを使用してデータを読み取ることができません。読み取りは常に空文字列です。STDファイルストリームが壊れていますか? (内部ファイルバッファヌル、入力を読み取ることができません)
#include <fstream>
#include <string>
#include <iostream>
std::string getFileString(const std::string& path)
{
std::ifstream file(path);
if (!file)
throw std::exception("Cannot Open File");
if (!file.is_open() && !file.good())
throw std::exception("Cannot Open File");
std::string t;
file >> t;
std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
return content;
}
int main()
{
std::string t = getFileString("C:\\Users\\user\\Documents\\folder\\t1.txt");
return 0;
}
私はこれを数時間デバッグしようとしましたが、修正する方法はありません。私はこの全く同じことをするために新しいプロジェクトを試しました。ifstreamは何も読みません。
私が確認した:
ファイルにデータがある
パスは、私はデバッグ・ライブラリ
で、デバッグの下でコンパイルしています正しい
です私は試しました:
のstd :: getlineの(ファイル、T)
file.getline
使用してイテレータ
んが、例外はありません>>演算子を使用して
スローされる(ios :: failbitとios :: badbitが設定されていても)
ファイルは
file.is_openは、()()壊れているように見える
私は(コンストラクタ呼び出し後)デバッガでファイルストリームオブジェクトを調べる
trueで真とfile.goodである(全体の良いですバッファがヌルで、ポインタにヌルの束があり、唯一の有効なデータはファイル自体への参照です)。私はWin32とx64の両方のためにコンパイルしていると私は同じ結果を得ます。
VS 2012用の配布可能なC++のインストールを修復しました。これは同じ問題です。
私はこの時点で何をすべきか分かりません。私はこれまでにこのような問題は見たことがありません。私は他のstdオブジェクトもこのように壊れているのか疑問に思っています。あるいは、何らかの形で壊れているCファイルストリームです。
編集***私は引数を削除しましたが、読み込まれているデータは私のファイルからのものではありません。
ランダムな引数を 'ifstream'コンストラクタに渡すのはなぜですか?それらはどこから手に入りましたか? [マニュアル](http://en.cppreference.com/w/cpp/io/basic_ifstream/basic_ifstream)では、それらについて説明していますか? –
あなたはどんなランダムな議論をしていますか?私はパスと使用するフラグを渡しています。 – Igneous01
@ Igneous01 'std :: ios :: failbit | std :: ios :: badbit'の引数です。 –