我已经在谷歌上搜索了一段时间,但无济于事,我什至不确定是否有这个名称。
我的用例是:我有一个大文件,其中包含应独立处理的文本 block 。它们都一个接一个地列在文件中,并用分隔符分隔。我想逐 block 读取该文件并对读取的 block 进行一些操作,然后读取下一个 block 。有点像遍历文件,但不是一次全部读取到内存中。我有 Java 代码通过某种 BlockGen 类实现可迭代接口(interface)并在客户端代码需要时从先前读取的位置读取文件,但我非常不确定如何在 C++ 中正确实现它。
感谢任何帮助。是的,这不是家庭作业!
最佳答案
对于固定 block 大小,您可以使用 ifstream::read
在您的情况下,推出您自己的 BlockGen
并不难:
给定 Block
的定义例如一个std::vector<std::string>
, 和一个类(虽然适合复制构造函数等)
class BlockGen
{
public:
//boilerplate constructors, taking delimiter between blocks
// opening input etc, etc
Block getNextBlock()
{
Block block;
std::string line;
while( std::getline(input, line) && line!=delimiter)
{
block.push_back(line);
}
return block;
}
private:
std::ifstream input;
std::string delimiter;
};
关于c++ - 分部分读取文件,在最后读取的部分之后继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25544177/