- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的例子中,
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/
#include #include #include using namespace std; int main() { ofstream fout("test.txt"); f
我想报告一个错误的解决方案在 Mac OS X El Capitan 版本 10.11.2 中安装 OpenFOAM 3.0.1 时得到错误是: "error: member reference ty
有没有人有一个例子来说明如何重新定义 C++ 内置的 clog,而不是有一个新的关联 rdbuf(),它被处理为原始 clog.rdbuf() 和 ofstream 对象的 rdbuf() 的三通到磁
使用这段代码,我从文件中读取了一个字符串。 pbuf = infile.rdbuf(); size = pbuf->pubseekoff(0, ios::end, ios::in); pbuf->pu
我试图通过简单地使用 rdbuf() 将两个文件合并为一个文件,但是在合并时,文件的第一行丢失了。代码如下: void mergeFiles(ifstream &file1, ifstream &fi
我有一个单元测试,它通过读取函数发送的缓冲区来验证函数: template void print_manifold(Manifold const& manifold) try { std::co
我正在尝试将文件内容复制到缓冲区。 std::ifstream fp(myFile, std::ios::binary) fp.seekg(0, fp.end); // set cursor at t
在下面的例子中, ifstream myFile; myFile.open("example.txt", ios::binary); cout << myFile.rdbuf() << endl; m
我正在尝试了解 IO 流的结构。 从 cppreference std::basic_stringstream::str 开始: Manages the contents of the underly
使用 rdbuf 将流复制到另一个流是一种众所周知的方法: #include #include int main() { std::ifstream in{"/tmp/foo.txt"};
这是我的简单代码: #include int main() { int foo; std::cin.rdbuf(std::cout.rdbuf()); std::cin>>f
提出以下问题的用户很快就接受了“读取缓冲区”: What does rd stand for in rdstate and rdbuf? 我仍然想知道“读取缓冲区”在“std::ostream”(co
我试试下面的代码: ostringstream oss; streambuf *psbuf, *backup; backup = oss.rdbuf(); psbuf = cout.rdbuf
比方说,我有几个数字的文件 input.txt 1 2 4 51 3 77 现在,我正在尝试执行这个命令: `string filename="input.txt"; ifstream ifs
有一个STL 库函数 streambuf* std::basic_ios::rdbuf (streambuf* sb); 此函数可用于更改与流关联的流缓冲区。如果您使用它,它会返回一个指向先前使用的
此代码的目的是支持通过 ./a.out 2) { in.open(argv[1]); } istream & input = (argc > 2 ? in : cin); string li
我有以下代码,它工作得很好(除了它很慢,但我不太在意)。将 infile 的全部内容写入 outfile 似乎并不直观。 // Returns 1 if failed and 0 if success
ofstream ofs1("file1.dat", ios::out | ios::binary); unsigned char data[64] = {0}; ofs1.write((char*)
是否可以在使用 .rdbuf() 函数将缓冲区推送到另一个流 stream 后重用字符串流 s? 我重建了环境: http://ideone.com/JoPJ1E #include using na
我正在尝试使用 pubsetbuf 方法修改 stringstream 对象的 stringbuffer 而不必复制字符串,但它不起作用。我正在关注 http://www.cplusplus.com/
我是一名优秀的程序员,十分优秀!