为什么rdbuf()没有打印任何东西?

时间:2015-03-20 20:56:00

标签: c++ ifstream

在以下示例中,

ifstream myFile;
myFile.open("example.txt", ios::binary);
cout << myFile.rdbuf() << endl; 
myFile.close();

将在一行中完整打印文件的内容。你也可以这样做:

ifstream myFile;
myFile.open("example.txt", ios::binary);    
unsigned char character = myFile.get();
while(myFile){
    cout << "one character = ";
    cout << character;
    character = myFile.get(); //gets each individual character, 1 at a time
}
myFile.close();

它将打印文件的内容,一次一个字符。但是,如果您尝试一个接一个地执行这些方法(按任何顺序),则只有一个方法实际上会打印任何内容。有人可以解释为什么在以下示例中,对rdbuf()的调用不会打印文件的内容吗?

ifstream myFile;
myFile.open("example.txt", ios::binary);    
unsigned char character = myFile.get();
while(myFile){
    cout << "one character = ";
    cout << character;
    character = myFile.get(); //gets each individual character, 1 at a time
}
cout << myFile.rdbuf() << endl; 
myFile.close();     

谢谢!

1 个答案:

答案 0 :(得分:1)

当您从流中读入时,读取位置会递增。在逐个字符地读取整个文件后,读取位置位于文件末尾。在这种情况下,rdbuf()(读取缓冲区)没有任何兴趣。

如果您想使用rdbuf()再次打印文件,可以在尝试打印之前使用myFile.seekg(0, std::ios::beg);设置读取位置。在此特定示例中,可能已经设置了错误位,因此在移动读指针之前可能需要执行myFile.clear()