分部分读取文件,在最后读取的部分之后继续

Read a file in parts, continue after the last read part

本文关键字:读取 之后 继续 文件 最后      更新时间:2023-10-16

我已经在谷歌上搜索了一段时间,但没有结果,我甚至不确定是否有这个名字。

我的用例是:我有一个大文件,其中包含应该独立处理的文本块。它们都一个接一个地列在文件中,并用分隔符分隔。我想一块一块地读取该文件,对读取的块进行一些操作,然后读取下一个块。类似于遍历一个文件,但不是一次全部读取到内存中。我有java代码,它通过某种BlockGen类来实现可迭代接口,并在客户端代码需要时从以前读取的位置读取文件,但我非常不确定如何在C++中正确实现这一点。

感谢您的帮助。是的,这不是家庭作业!

对于固定块大小,可以使用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;
};