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

标签 c++ file-io iteration

我已经在谷歌上搜索了一段时间,但无济于事,我什至不确定是否有这个名称。

我的用例是:我有一个大文件,其中包含应独立处理的文本 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/

相关文章:

c++ - 重载括号运算符赋值

c++ - 结构体和数组自动售货机

java - JNotify(java 文件观察器)行为不一致

python - 如何在目录中找到带有 .MP3 扩展名的最新文件?

c++ - 非托管 C++ 库 - VS2005 和 VS2008 之间的区别?

c++ - 读取 SGX 飞地中的文件内容

java - 如何为给定的每个命令行参数执行一段代码,但将其打印在一行中

list - 如何在 haskell 中进行有状态列表操作

C++ 遍历 2D vector 以连续查找 3

c++ - Nvidia optimus NvOptimusEnablement