【问题标题】:Qt: Insert QByteArray in a file at a certain positionQt:在文件中的某个位置插入 QByteArray
【发布时间】:2013-07-08 22:28:30
【问题描述】:

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

【问题讨论】:

  • 据我所知,文件系统 api 不支持它。您需要阅读文件的其余部分并手动将其移动到新位置。

标签: qt qt4 qt5 qfile qbytearray


【解决方案1】:

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

假设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();

【讨论】:

    【解决方案2】:

    如果文件大小仍然很小,我同意 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.
    

    【讨论】:

    • 我不明白...Copy remaining bytes from file1 to file2 部分不是也将文件复制到内存中吗?
    • 是的,但是通过使用 2 个文件,您可以分块复制,而不是随时在内存中对整个文件进行排序。抱歉,如果不清楚。
    • 明白。谢谢你的澄清。
    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2015-12-28
    • 2014-02-11
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多