使用iostream从filebuf读取和写入

时间:2015-04-30 16:20:05

标签: c++ iostream filebuf

iostream分配stringbuf时,一切正常

std::stringbuf fb;
std::iostream fs(&fb);
char i = 17, j = 42;
fs.write(&i, 1);
fs.write(&j, 1);
char x, y;
fs.read(&x, 1);
fs.read(&y, 1);
std::cout << (int) x << " " << (int) y << std::endl;
  

17 42

但是,如果我尝试将stringbuf更改为使用filebuf,那么它就不再有用了

std::filebuf fb;
fb.open("/tmp/buffer.dat", std::ios::in | std::ios::out | std::ios::trunc);
std::iostream fs(&fb);

...
  

0 0

ghex tels me "/tmp/buffer.dat"包含了它的假设。

  • 是否可以在不关闭并重新打开文件的情况下从filebuf进行读写?

1 个答案:

答案 0 :(得分:0)

在继续阅读之前,您需要先找回缓冲区:

fs.write(&i, 1);
fs.write(&j, 1);
char x, y;

fs.pubseekpos(0);

fs.read(&x, 1);
fs.read(&y, 1);