QFile无法打开大文件

时间:2014-02-17 18:47:57

标签: qt qfile

我试图读取存储为.txt的数据文件,其中一些非常大(> 1 GB)。似乎每次QFile尝试对大于600MB的文件使用.open()方法时,它都会冻结并崩溃。有没有比QFile打开大文件更好的方法?下面显示的if (_file.open(QIODevice::ReadOnly))行下方的代码都没有执行,因此我认为崩溃发生在调用open方法的地方。

我从类似问题的答案中理解,读取大文本文件并不是处理大量数据的好方法,但遗憾的是这些是我无法控制的日志文件。我需要能够读取这些文件或优雅地处理/忽略超大文件,但我找不到有关如何检测最大读取大小的信息。我宁愿不必在文本编辑器中手动打开和拆分这些文件,因为我有大约一个TB的处理和手动拆分可能导致丢失重要信息。我并不过分关注这个程序的响应能力,任何用于打开文件的方法都可以考虑很长一段时间,因为这个程序将用于数据处理而不是任何用户交互。

感谢您的帮助

代码:

void FileRead::openNewFile()
{
    if(_listOfFiles.size()>0)
    {
        _file.setFileName(_listOfFiles.at(0));
        if (_file.open(QIODevice::ReadOnly)) //file opened successfully
        {
            _file.reset();
            emit fileOpened();
            emit fileOpened(_file.fileName());
            qDebug()<<"File Opened";
            qDebug()<<_file.fileName();


        }
        else
        {
            qDebug()<<"Unable to open file";
            qDebug()<<_listOfFiles;
            _listOfFiles.removeAt(0);
            emit fileSent();
        }
    }
    else
    {
        qDebug()<<"All files processed";
    }
}

1 个答案:

答案 0 :(得分:1)

我认为您正在重新使用已经打开的QFile,这可能会有问题。

reset()的调用毫无意义 - 您刚刚打开文件,按定义重置。

您尚未提供代码崩溃的确切位置的回溯。我无法重现您的问题 - 我有一个16GB的稀疏文件,我可以在Windows 7和OS X上的Qt 4.8和Qt 5.2上成功打开,读取和关闭。

如果你为此编写一个最小的测试用例(一个独立的应用程序除了打开文件,从它读取几个字节并关闭它之外什么都不做),你可能会发现它没有崩溃 - 问题出在代码的其他地方。