-1

我的程序中有以下代码。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 的放置指针发生变化?

4

2 回答 2

6

你不能打开一个ifstream写作。如果您想要读取和写入访问权限,请使用fstream.

于 2013-04-26T17:42:19.693 回答
0

你打印整个文件,对吧?您在 ostream 构造函数中使用流缓冲区指针。然后打印数据(这会移动指针)(ostream 有一个引用)并获取指针位置(移动它之后) 你的字符串有多少个字符?(21?)您在打印 rdbuf() 时移动了指针。我认为是因为它在它的指针内部使用了算术

于 2013-04-26T17:47:21.097 回答