[英]fstream to buffer works, filebuf to buffer doesn't
我正在尝试将我的代码从std :: fstream转换为std :: filebuf:
fstream版本(原始):
std::ifstream stream(file);
stream.seekg(0,std::ios::end);
size_t fileSize = stream.tellg();
char * dataBuf = new char[fileSize];
stream.seekg(0);
stream.read(dataBuf, fileSize);
LoadData(dataBuf);
filebuf版本(转换):
std::filebuf * stream = new std::filebuf;
stream->open(file, std::ios::in);
size_t fileSize = stream->pubseekoff(0, std::ios::end);
char * dataBuf = new char[fileSize];
stream->pubseekpos(0);
stream->pubsetbuf(dataBuf, fileSize);
LoadData(dataBuf);
filebuf
版本似乎未加载。 我不知道缺少什么,因为fileSize
相同,而dataBuf
返回相同的字符串。 我应该执行其他功能吗?
调用pubsetbuf()
肯定不会对您有多大帮助。 唯一需要的行为是stream->pubsetbuf(0, 0)
使文件缓冲区成为没有缓冲的,而您几乎肯定不希望这样做。 它不能保证如果参数为非null会发生什么。 特别是,它不能保证所使用的缓冲区就是传递的缓冲区! 实际上,如果有任何实现使用用户提供的缓冲区,我会感到惊讶。 即使使用了缓冲区,文件缓冲区也没有理由将代码实际放入缓冲区中! 至少您需要引起一个std::filebuf::underflow()
调用,例如,从缓冲区中读取内容。
如果要直接使用std::filebuf
需要使用std::filebuf::sgetn()
。 这样做并没有多大意义,因为std::ifstream::read()
只会有效地调用std::filebuf::sgetn()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.