- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将我的代码从 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)
使文件缓冲区无缓冲,这几乎肯定是您不想要的。它不保证参数为非空时会发生什么。特别是,它不能保证正在使用的缓冲区就是正在传递的缓冲区!事实上,如果任何实现使用用户提供的缓冲区,我都会感到惊讶。即使使用了缓冲区,文件缓冲区也没有理由将任何内容实际放入缓冲区!至少您需要调用 std::filebuf::underflow()
,例如,从缓冲区中读取一些内容。
如果你想直接使用std::filebuf
,你需要使用std::filebuf::sgetn()
。这样做并没有多大意义,因为 std::ifstream::read()
无论如何都会有效地调用 std::filebuf::sgetn()
。
关于c++ - fstream 缓冲有效,filebuf 缓冲无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20983221/
我公司的产品运行在许多合格的 Linux 硬件/软件配置上。从历史上看,使用的编译器是 GNU C++。出于本文的目的,让我们将版本 3.2.3 视为基线,因为我们的软件在该版本中“按预期工作”。 随
typedef struct { char c[20]; int i; } header; void foo(std::string s) { std::ifstream ifs(s.c_
我有一个使用 STLPort 5.2.1 的 Visual Studio 2008 C++ 03 应用程序,我想在其中使用自定义 std::filebuf执行。例如: class MyFileBuf
我正在尝试将我的代码从 std::fstream 转换为 std::filebuf: fstream版本(原版): std::ifstream stream(file); stream.seekg(0
这是代码: #include #include #include int main() { { std::filebuf f; f.open("test.
我有一些代码使用 std::ifstream 从文件中读取,但不使用 std::ifstream 提供的任何格式化功能。它基本上做这样的事情: std::ifstream in; in.open("e
我正在修复一些使用旧式 iostream 库的相当旧的 C++ 代码,我遇到了以下非编译代码行: ::ofstream ofile; ofile.open("filename", ios::trunc
我如何设置一个新的字符数组作为fstream的filebuf的缓冲区,filebuf中有一个函数(setbuf)但它是 protected 。在网上搜索时,有些网站提到 fstream::setbuf
我正在尝试制作一个自定义的 std::fstream,它会在读取时对数据进行编码/解码。 template class _filebuf : public std::filebuf { public
请检查以下代码: #include #include #include int main() { char mybuffer[512]; std::filebuf* optr =
我创建了一个空文件,我正在尝试调整它的大小。除了打开模式外,我的调整大小和创建代码非常相似。初始创建按预期工作。调整大小的代码执行得很好,但文件大小调整没有反射(reflect)出来。 这是我的代码:
带有 ifstream我们可以将整个文件输出到cout像这样: std::ifstream foo("testfile"); std::cout #include #include int ma
如果使用 std::filebuf,是否有等同于以下函数的函数? : std::ifstream::eof std::ifstream::fail std::ifstream::tellg 如果是,是
在尝试将一段 C++ 代码从 MSWindows 移植到 Linux (Mint10) 时,我偶然发现了一个奇怪的问题。我发现硬编码文件名中有一个小错字:尾随空格字符 (\x20)。 该代码在 Win
我是一名优秀的程序员,十分优秀!