私が理解しているように、テキストモードで使用するtellg
とseekg
、改行のために驚くかもしれませんが、改行なしで奇妙な結果が得られます。次のコードがあります。
#include <fstream>
int main()
{
using namespace std;
ifstream file("test.txt");
char a;
file >> a;
ifstream::streampos curPos = file.tellg(); // _Fpos = 1
ifstream::streampos endPos = file.seekg(0, ios::end).tellg(); // _Fpos = 5
ifstream::streampos testPos = file.seekg(curPos).tellg(); // _Fpos = 1
file.putback(a);
testPos = file.tellg(); // _Fpos = -511 in text mode,
// _Fpos = 0 in binary mode
}
text.txt の内容:
0 1 2
tellg
ファイルがテキストモードで開かれている場合、最後のものは間違った結果を返します。この位置にしようとするseekg
と、ファイル ストリームが台無しになります。私は何か間違ったことをしていますか、それともある種のバグですか?
私はVS2010、Win 7 64ビットを使用しています。
ありがとうございました。