繁体   English   中英

如何从 std::string 为 fstream 创建一个缓冲区

[英]How to make a buffer for fstream from std::string

我写了这段代码:

  ifstream f("file.txt");
  char c;
  std::string buffer;
  buffer.reserve(1024);

  bool flag = true;
  while (flag) {
    for (int i = 0; i < 1024; ++i) {
      if (f.get(c))
        buffer += c;
      else
        flag = false;
    }

    // do something with buffer

    buffer.clear();
  }

我需要正好 1 KB 的字符串缓冲区。 有没有更好更有效的方法来做到这一点? 也许一些我不知道的 fstream 或字符串函数?

您不需要for循环,您可以使用std::istream::read()代替。 如果可能,请将std::string替换为char[] ,例如:

ifstream f("file.txt");
char buffer[1024];

while (f.read(buffer, 1024))
{
  // do something with buffer up to f.gcount() chars... 
}

如果出于某种原因,您实际上需要一个std::string ,那么您可以这样做:

ifstream f("file.txt");
std::string buffer(1024);

while (f.read(&buffer[0], 1024)) // or buffer.data() in C++17 and later
{
  buffer.resize(f.gcount());

  // do something with buffer ... 

  buffer.resize(1024);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM