我的程序中有以下代码。 IoFile.out几行。
int main()
{
ifstream inFile("Iofile.out", ios::in|ios::out);
ostream outStream(inFile.rdbuf());
cout << "tellp outStream " << outStream.tellp() << endl; // tellp outStream 0
cout << "tellg inFile " << inFile.tellg() << endl; // tellg inFile 0
cout << inFile.rdbuf(); // Print whole file
cout << "tellp outStream " << outStream.tellp() << endl; // tellp outStream 21
cout << "tellg inFile " << inFile.tellg() << endl; // tellg inFile 21
return 0;
}
tellp和tellg的输出如注释中所示。 我的查询是当我将文件内容写入cout时,我希望只有streambuf的读指针(即tellg)移动到文件的末尾。但在这种情况下,我看到outStream的put指针也被移动到文件末尾。为什么是这样 ?为什么要将文件打印到cout导致outStream的put指针改变?
答案 0 :(得分:6)
您无法打开ifstream
进行撰写。如果你想要阅读和阅读写访问权限,请使用fstream
。
答案 1 :(得分:0)
你打印整个文件,对吗? 您在ostream构造函数中使用streambuffer指针。 然后你打印数据(这会移动指针)(ostream有一个参考) 并获得指针位置(移动后) 你的字符串有多少个字符? (21?) 在打印rdbuf()时移动了指针。 我认为它是因为它内部使用了一个算术而不是它的指针