Qt:将QByteArray插入某个位置的文件中

时间:2013-07-10 20:11:16

标签: qt qt4 qt5 qfile qbytearray

是否可以在文件中的某个位置插入QByteArray? 例如,如果我有一个已经有100KB数据的文件,是否可以在位置20插入QByteArray?之后,文件将由0KB到20KB的数据构成,然后是QByteArray,之后是20KB到100KB的数据序列。

2 个答案:

答案 0 :(得分:3)

没有单一的功能可以做到,但只需几行代码即可完成。

假设dataQByteArray,其中包含要插入文件的数据。

QFile file("myFile");
file.open(QIODevice::ReadWrite);
QByteArray fileData(file.readAll());
fileData.insert(20, data); // Insert at position 20, can be changed to whatever you need.
file.seek(0);
file.write(fileData);
file.close();

答案 1 :(得分:1)

如果文件大小仍然很小,我同意Daniel的回答,但是如果应用程序一直写入文件并且它变得非常大,那么您正在将完整的文件读入内存。

在这种情况下,您可以创建第二个文件并将字节从第一个文件复制到插入位置。然后在复制第一个文件中的其余数据之前将新字节写入文件。所涉及的步骤将是: -

Open file1 for read
Open file2 for write
Copy file 1 to file2 until insertion point
Write new bytes to file2
Copy remaining bytes from file1 to file2
Close file handles
Delete file1
Rename file2 to file1's name.