我最近发现了stream_iterator,它非常适合读取我想忽略所有空白字符的文本文件。所以,我可以将文件读入矢量,如下所示:
std::ifstream infile(file path, std::ios::binary);
std::vector<char> vec;
vec.insert(vec.begin(),
std::istream_iterator<char>(infield),
std::istream_iterator<char>());
这很好用,只能读取我想要的非空格字符。但是,我试图以块的形式读取文件,我想知道如何将这个典型示例扩展为一次读取n
个字节。
BTW:我注意到这对stream_iterator来说是特别的。例如,做:
std::vector<char> vec(5);
input_file.read(&vec[0], 5);
这不会限制空格字符。
不幸的是,我无法一次读取整个文件,必须进行流式传输。另外,我不能使用第三个库包,需要继续使用标准库。
答案 0 :(得分:2)
我不知道任何标准库算法可以实现您想要做的事情。但是,自己实现它将是微不足道的:
auto ReadChunk (std::istream &in, std::int64_t chunkSize) {
std::vector<char> ret;
ret.reserve(chunkSize);
for (std::int64_t i = 0; i < chunkSize; ++i) {
char c;
if (!(in >> c))
throw std::runtime_error("Fail"); // Or some other error handling
ret.push_back(c);
}
return ret;
}
这很容易,清晰和有效,足以使它不逊于任何智能图书馆解决方案IMO。