QFile/QDataStream 写入现有数据

Posted

技术标签:

【中文标题】QFile/QDataStream 写入现有数据【英文标题】:QFile/QDataStream writing on existing data 【发布时间】:2011-03-26 06:16:28 【问题描述】:

我有一个 8 字节长的文件。 例如它看起来像这样:

22222222

现在,我首先读取 5 个字节并更改它们。例如。给11111

最后,我想将它们写入到文件中,所以我希望文件看起来像这样:

11111222

但我只得到11111,因为文件已被删除。如何禁用擦除? (也许这个问题存在,但找不到这样的问题)

【问题讨论】:

【参考方案1】:

根据您对文件的具体操作,您可能需要对其进行内存映射:

QFile f("The file");
f.open(QIODevice::ReadWrite);
uchar *buffer = f.map(0, 5);

// The following line will edit (both read from and write to)
// the file without clearing it first:
for (int i=0; i<5; ++i) buffer[i] -= 1;

f.unmap(buffer);
f.close();

【讨论】:

【参考方案2】:
void fileopen()

QDataStream Input(&file);
Input>>"11111";
Input>>"22222";
file.close();

这个函数写入数据。

QDataStream &operator<<(QDataStream &ds,const QString &data)


ds<<data.toLatin1().data();
ds<<data.toLatin1().data();
return ds;

【讨论】:

【参考方案3】:

尝试使用| QIODevice::Append 打开QFile,然后使用QFile::seek(),然后在QFile 对象上创建QDataStream。但请注意,QDataStream 将控制信息添加到输出中,因此可能不会得到您想要的结果。

此外,如果您想写入文本而不是二进制数据,请尝试使用 QTextStream

【讨论】:

以上是关于QFile/QDataStream 写入现有数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从外部进程将数据写入现有进程的 STDIN?

无法将数据写入传输连接:现有连接被远程主机强行关闭

如何在不删除现有数据的情况下写入文件[重复]

使用 xlwings 写入现有 Excel 工作簿

从 db 写入现有 Excel 文件但具有不同的标题

如何在不加载图像的情况下为文件系统上的现有图像写入或修改 EXIF 数据?