如何在C ++中逐部分读取文件?

时间:2017-08-05 14:07:40

标签: c++ file-io fstream filereader ifstream

我需要阅读一个大文本文件(超过10,000行)。

然而,想法是读取这个文本文件的一个块(可能是大约15行 - 块逐块),处理它,然后继续从我离开的地方读取下一个块。

我正在做的是跟踪我离开的地方的行号,我处理我的信息,然后我有一个函数将文件指针移动到我离开的地方,我做下一个块和等......

以下是用于跳过行的函数:

ifstream& SkipToLine(ifstream& file, unsigned int num) {
    file.seekg(ios::beg);
    for (unsigned int i = 0; i < num; ++i) {
        file.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    return file;
}

然后在另一个函数中我有这样的东西:

ifstream inputfile;
// Taking care of exceptions here...
inputfile.open(fileOBS);

while (!inputfile.eof()) {

    SkipToLine(inputfile, LineNum);
    getline(inputfile, line);

    // Then a function for reading the block
    // Then a function for processing the block
    // Keeping track of the line number
    LineNum = update;

    // If reached end of block, 
    break;    
}

我在另一个函数中调用上面的函数来循环遍历整个文件,条件是:

while(LineNum < FileLength){
    // call function above

}

我发现这是低效的,因为如果块是朝向文本文件的末尾,我基本上调用一个函数从文件的第一行开始计数,直到我到达一个几乎可能在文件的结尾。

有没有办法可以主动跟踪我离开的文件指针?

感谢您的时间!

0 个答案:

没有答案