ストリームの状態には、以前の読み取りによって設定されたeofビットがあるため、書き込みは効果がありません。書き込みの前にストリームの状態をクリアします。
void ftest()
{
std::fstream fs("f.txt", std::fstream::in | std::fstream::out | std::fstream::trunc);
if(fs)
{
std::cout << "A: " << (fs.eof() ? "eof" : "neof") << std::endl;
std::string str = "45464748";
fs << str;
std::cout << "B: " << (fs.eof() ? "eof" : "neof") << std::endl;
fs.seekg(0, std::ios::beg);
std::cout << "C: " << (fs.eof() ? "eof" : "neof") << std::endl;
int i = -1;
// THIS read sets the EOF bit.
fs >> i;
std::cout << "D: " << (fs.eof() ? "eof" : "neof") << std::endl;
std::cout << i << std::endl;
fs.seekp(0, std::ios::beg);
std::cout << "E: " << (fs.eof() ? "eof" : "neof") << std::endl;
i = 0x41424344;
std::cout << "F: " << (fs.eof() ? "eof" : "neof") << std::endl;
fs << "not written";
fs.clear();
std::cout << "G: " << (fs.eof() ? "eof" : "neof") << std::endl;
fs << i;
fs.close();
}
}
出力:
A: neof
B: neof
C: neof
D: eof
45464748
E: eof
F: eof
G: neof
ファイルの内容:
1094861636
は 'coutの<< I <<てendlん。' '印刷を45464748'? – SgtDroelf
はい、次の書き込みに失敗しました –
どのコンパイラですか?どのスタンダード(C++ 11、C++ 14、...)?さまざまな場所で異なるビット(eofbit、failbit、badbit)を確認できますか? –