将整个数组写入 QFile
Writing an entire array to QFile
QFile::write()
documentation 说:
Writes at most maxSize
bytes of data from data to the device. Returns the number of bytes that were actually written, or -1 if an error occurred.
(是的,这就是整个文档 - 对于 Qt 来说异常糟糕。)
这似乎暗示不写入您传递的所有数据是很常见的。这是否意味着我应该在循环中调用 write()
,传递剩余的未写入数据,直到它完全写入?
如果是这样,那似乎很痛苦。 Qt 中是否有一些方便的功能可以为我做这件事?
This seems to imply that it is common for it not to write all of the data you pass
常见,不,但有可能,我们将在下面看到。
Is there some convenience function in Qt that will do it for me?
如果您正在编写整个文件,更好的方法是使用 QSaveFile,对于 "safely writing to files"。
正如 QSaveFile
的文档中所述:
QSaveFile automatically detects errors while writing, such as the full partition situation, where write() cannot write all the bytes.
因此,一个完整的分区可能会导致 QIODevice::write
无法将数据完全写入磁盘。磁盘故障、在写入期间移除便携式存储设备或网络驱动器也可能导致仅写入部分数据。
Yes that's the entire documentation - unusually poor for Qt.
没有更多内容了。
Does that mean I should call write()
in a loop
有些东西必须阻止 write
完成,也许缺少的一点是它不会无缘无故地写入 maxBytes
。 IE。不是为了惹你生气,而是因为 write
无法继续。
如果您删除导致它失败的条件,您可以再次调用它。在大多数情况下,重试是没有意义的 - 当 write
未能写出您想要写的内容时,您就完成了并将其作为错误处理。
QFile::write()
documentation 说:
Writes at most
maxSize
bytes of data from data to the device. Returns the number of bytes that were actually written, or -1 if an error occurred.
(是的,这就是整个文档 - 对于 Qt 来说异常糟糕。)
这似乎暗示不写入您传递的所有数据是很常见的。这是否意味着我应该在循环中调用 write()
,传递剩余的未写入数据,直到它完全写入?
如果是这样,那似乎很痛苦。 Qt 中是否有一些方便的功能可以为我做这件事?
This seems to imply that it is common for it not to write all of the data you pass
常见,不,但有可能,我们将在下面看到。
Is there some convenience function in Qt that will do it for me?
如果您正在编写整个文件,更好的方法是使用 QSaveFile,对于 "safely writing to files"。
正如 QSaveFile
的文档中所述:
QSaveFile automatically detects errors while writing, such as the full partition situation, where write() cannot write all the bytes.
因此,一个完整的分区可能会导致 QIODevice::write
无法将数据完全写入磁盘。磁盘故障、在写入期间移除便携式存储设备或网络驱动器也可能导致仅写入部分数据。
Yes that's the entire documentation - unusually poor for Qt.
没有更多内容了。
Does that mean I should call
write()
in a loop
有些东西必须阻止 write
完成,也许缺少的一点是它不会无缘无故地写入 maxBytes
。 IE。不是为了惹你生气,而是因为 write
无法继续。
如果您删除导致它失败的条件,您可以再次调用它。在大多数情况下,重试是没有意义的 - 当 write
未能写出您想要写的内容时,您就完成了并将其作为错误处理。