qt C++ file 读取5Gb文件 存储qbytearray
时间: 2024-10-09 07:02:20 浏览: 42
在Qt C++中,处理大文件(如5GB)并存储于`QByteArray`中可能会遇到内存限制。因为`QByteArray`是一个内置于内存的数据结构,一次性将大文件加载到内存可能会导致内存溢出。因此,你需要采用分块读取的方式,逐段读取文件内容。
下面是一个简单的例子,展示如何使用`QDataStream`配合`QFile`来分块读取大文件,并将每一块存入`QByteArray`:
```cpp
#include <QObject>
#include <QFile>
#include <QDataStream>
#include <QByteArray>
class BigFileReader : public QObject
{
public:
explicit BigFileReader(const QString &filePath)
: file(filePath), currentOffset(0), maxBufferSize(1024 * 1024 * 1024) // 1GB缓冲区
{}
QByteArray readEntireFile()
{
QByteArray result;
qint64 fileSize = file.size();
while (currentOffset < fileSize) {
qint64 remainingToRead = std::min(fileSize - currentOffset, maxBufferSize);
file.seek(currentOffset);
QByteArray block = file.read(remainingToRead);
// 将读取的块追加到结果
result.append(block);
currentOffset += remainingToRead;
// 如果还有更多数据,继续读取;否则结束
if (currentOffset == fileSize) break;
}
return result;
}
private:
QFile file;
qint64 currentOffset;
qint64 maxBufferSize; // 缓冲区大小,可以根据需求调整
};
```
在这个`BigFileReader`类中,我们每次读取不超过1GB的数据,然后将这部分数据追加到结果`QByteArray`中。当文件读取完毕,返回完整的`QByteArray`。
阅读全文