gpt4 book ai didi

c++ - 为什么 rdbuf() 不打印任何东西?

转载 作者:行者123 更新时间:2023-11-28 06:21:59 26 4
gpt4 key购买 nike

在下面的例子中,

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();

谢谢!

最佳答案

当您从流中读入时,读取位置会递增。一个字符一个字符地读入整个文件后,读取的位置是文件的末尾。在这种情况下,rdbuf()(读取缓冲区)没有任何其他意义。

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

关于c++ - 为什么 rdbuf() 不打印任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29175683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com