是否可以在文件中的某个位置插入QByteArray
?
例如,如果我有一个已经有100KB数据的文件,是否可以在位置20插入QByteArray
?之后,文件将由0KB到20KB的数据构成,然后是QByteArray
,之后是20KB到100KB的数据序列。
答案 0 :(得分:3)
没有单一的功能可以做到,但只需几行代码即可完成。
假设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();
答案 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.