是否可以在文件中的某个位置插入QByteArray
?例如,如果我有一个已经有100KB数据的文件,是否可以在位置20插入QByteArray
?然后是要构建的文件的从0KB到20KB的数据序列,然后是QByteArray
,然后是从20KB到100KB的数据顺序。
没有一个函数可以实现这一点,但只需几行代码就可以实现。
假设data
是具有要插入到文件中的数据的QByteArray
。
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();
如果文件大小仍然很小,我同意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.