如何在我处理之前报告进度而不浏览整个文件

How to report progress without going through the entire file before I process

我必须解析一个包含数千条记录的大文件。我想显示一个进度条,但我不知道预先记录的数量。我是否必须翻转此文件两次?

或者有没有更简单的方法来获取记录数,而无需在我处理之前遍历整个文件?

我的代码片段:

void readFromCSV(const QString &filename){

    int line_count=0;
    QString line;           

    QFile file(filename); 
    if(!file.open(QFile::ReadOnly | QFile::Text))
        return;

    QTextStream in(&file);

    while(!in.atEnd()){                             //First loop
        line = in.readLine();           
        line_count++;
    }

    while (!in.atEnd()) {                           //Second loop
        ...
        line = in.readLine();
        process();
        ...
    }
}

感谢您的帮助

这个问题与这里的问题不同:counting the number of lines in a text file

1) 循环过程已经完成。在这种情况下是防止双重拍摄。

2) 代码是 QT 代码,不是作为冗余添加的 C++ 函数

我认为如果不至少读取文件一次就无法计算行数。为了避免这种情况,我不会依赖于行数,而是依赖于我读取了多少数据。以下是我将如何解决这个问题:

QFile file(fileName);
file.open(QFile::ReadOnly | QFile::Text);

const auto size = file.size();

QTextStream in(&file);
while (!in.atEnd()) {
  auto line = in.readLine();
  // Process line.
  // [..]

  // Calculate the progress in percent.
  auto remains = file.bytesAvailable();
  auto progress = ((size - remains) * 100) / size;
  printf("progress: %d%%\r", progress);
}