将整个数组写入QFile

时间:2017-05-16 09:41:00

标签: qt qfile

QFile::write() documentation说:

  

将最多write()字节的数据从数据写入设备。返回实际写入的字节数,如果发生错误,则返回-1。

(是的,这是整个文档 - 对Qt来说非常糟糕。)

这似乎意味着它不会写下您传递的所有数据。这是否意味着我应该在一个循环中调用{{1}},传入剩余的未写入数据,直到它完全写入它为止?

如果是这样,那似乎很痛苦。 Qt中有一些便利功能可以帮我吗?

2 个答案:

答案 0 :(得分:2)

  

这似乎意味着它没有写下您传递的所有数据常见

常见,不,但我们可以在下面看到它。

  

Qt中有一些便利功能可以帮我吗?

如果您正在编写整个文件,更好的方法是使用QSaveFile,以“安全地写入文件”。

正如QSaveFile的文档中所述:

  

QSaveFile会在写入时自动检测错误,例如完整分区情况,其中write()无法写入所有字节。

因此,完整分区将是一个可能导致QIODevice::write无法将数据完全写入磁盘的实例。在写入磁盘故障,删除便携式存储设备或网络驱动器时,也可能只会写入部分数据。

答案 1 :(得分:0)

  

是的,这是整篇文档 - 对于Qt来说非常糟糕。

没有更多的东西。

  

这是否意味着我应该在循环中调用write()

有些东西必须阻止write完成,也许缺少的是它无缘无故地写maxBytes。即我们没做错,但是因为write无法继续。

如果删除导致其失败的条件,则可以再次调用它。在大多数情况下,重试没有意义 - 当write无法写出你想要写的内容时,你就完成了,并将其作为错误处理。