在以下示例中,
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();
谢谢!
答案 0 :(得分:1)
当您从流中读入时,读取位置会递增。在逐个字符地读取整个文件后,读取位置位于文件末尾。在这种情况下,rdbuf()
(读取缓冲区)没有任何兴趣。
如果您想使用rdbuf()
再次打印文件,可以在尝试打印之前使用myFile.seekg(0, std::ios::beg);
设置读取位置。在此特定示例中,可能已经设置了错误位,因此在移动读指针之前可能需要执行myFile.clear()
。