【发布时间】:2026-02-08 17:25:01
【问题描述】:
如何将 fstream 中的 128 个字节准确地读取到字符串对象中?
我编写了一些代码来读取文件的前 128 个字节并打印它,然后再读取文件的最后 128 个字节并打印它。最后一部分有效,因为您可以轻松地迭代到 EOF,但是我如何从前面获得 128 个字节呢?下面的代码不起作用,因为您无法将 128 添加到 ifstream 迭代器,它不可索引,只能递增(似乎)。
当然我可以创建一个迭代器并 *++ 128 次,但必须有一个简单的单行方法来做到这一点,对吧?
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char **argv)
{
std::ifstream ifs ("input.txt",std::ifstream::in | std::ifstream::binary);
if (ifs.good())
{
// read first 128 bytes into a string
ifs.seekg(0,std::ifstream::beg);
std::string first128((std::istreambuf_iterator<char>(ifs)),
(std::istreambuf_iterator<char>(ifs))+128);
std::cout << first128 << std::endl;
// read last 128 bytes into a string
ifs.seekg(-128,std::ifstream::end);
std::string last128((std::istreambuf_iterator<char>(ifs)),
std::istreambuf_iterator<char>());
std::cout << last128 << std::endl;
return 0;
}
return 1;
}
【问题讨论】:
-
read/readsome 仅对 char *s 进行操作,您无法从字符串类型中获取 char *(只有 const char *),因此您无法直接使用它们读取字符串类型。
标签: c++ string iostream fstream ifstream