我在Debian x64 PC上运行的程序中有一个奇怪的行为 .
我无法首先读取文件,然后写入另一个值然后读取这些值 . 我已经阅读了很多信息,包括有关stackoverflow的问题,发现(也通过实验)我需要更改seekp和seekg,我这样做 . 一切正常......直到我从流中读到一些东西 . 在读取操作之后,如果我寻找文件的开头,然后调用tellg(),tellp(),它们都返回'-1' .
测试代码:
void testFstreamSeekp() {
fstream in("file", ios::in | ios::out);
cout << "g: " << in.tellg() << endl;
cout << "p: " << in.tellp() << endl;
in.seekp(0, ios_base::end);
cout << "endp g: " << in.tellg() << endl;
cout << "endp p: " << in.tellp() << endl;
in.seekp(0, ios_base::end);
in.seekg(0, ios_base::end);
cout << "end g: " << in.tellg() << endl;
cout << "end p: " << in.tellp() << endl;
in.seekp(0, ios_base::beg);
in.seekg(0, ios_base::beg);
cout << "beg g: " << in.tellg() << endl;
cout << "beg p: " << in.tellp() << endl;
// Everything is fine until here (that is tellp() == 0, tellg() == 0)
int a, b;
in >> a >> b;
cout << "a: " << a << endl << "b: " << b << endl;
// tellg() == -1, tellp() == -1 ?????????!!!!!!!!!!
cout << "read g: " << in.tellg() << endl;
cout << "read p: " << in.tellp() << endl;
in.seekp(0, ios_base::beg);
in.seekg(0, ios_base::beg);
// tellg() == -1, tellp() == -1 ?????????!!!!!!!!!!
cout << "beg g: " << in.tellg() << endl;
cout << "beg p: " << in.tellp() << endl;
}
有人可以告诉我发生了什么,我该怎么做才能解决问题?
1 回答
对于
fstream
(std::basic_filebuf
),单个文件位置由seekp()
和seekg()
移动独立地跟踪
put
和get
位置是不可能的 .类模板
std::basic_filebuf
包含单个文件位置