我正在尝试读取存储为 .txt 的数据文件,其中一些非常大(>1 GB)。似乎每次 QFile 尝试对大于 600MB 的文件使用 .open() 方法时,它都会冻结并崩溃。有没有比 QFile 更好的打开大文件的方法?下面显示的行下面的代码都没有if (_file.open(QIODevice::ReadOnly))
执行,所以我相信崩溃发生在调用 open 方法的地方。
我从对类似问题的回答中了解到,读取大型文本文件并不是处理大量数据的好方法,但不幸的是,这些是我无法控制的日志文件。我需要能够读取这些文件或优雅地处理/忽略过大的文件,但我找不到有关如何检测最大读取大小的信息。我宁愿不必在文本编辑器中手动打开和拆分这些文件,因为我有大约 1 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";
}
}