Qt5.9开发文档翻译:QSaveFile类,QSaveFile Class
QSaveFile 类,提供一个用于安全地写入文件的接口。 详细说明……
头文件: |
#include <QSaveFile> |
qmake指令: |
QT += core |
自此版本开始引入: |
Qt 5.1 |
继承自: |
注意 : 这个类中的所有函数都是 可重入的 。
QSaveFile 类,提供一个用于安全地写入文件的接口。
QSaveFile 是一个输入/输出设备,用于写入文本和二进制文件, 当写入操作失败时不会导致已有数据丢失。
在写入过程中,文件内容会被写入到一个临时文件中,并且 ,如果未出错的话,调用 commit () 就会将它移动为最终文件。 这样,就确保了,即使写入过程 中出错了,最终文件 中已有的数据不会丢失,并且 , 不会有写入到一半的文件出现 在最终位置。 当妳向硬盘保存整个文档时,应当固定使用 QSaveFile 。
QSaveFile 自动检测写入过程 中的错误,例如,磁盘分区 满了,在那种情况下, write ()无法 将所有字节全部写入。 它会记住 “ 出错了 ” 这件事, 并在 commit ()中丢弃临时文件 。
与 QFile 类似,对应的文件是通过 open ()打开的。数据通常 是使用 QDataStream 或 QTextStream 来读取及写入的, 不过,妳也可以使用从 QIODevice 继承来的函数: read () 、 readLine () 、 readAll () 、 write ()。
与 QFile 不同的是,不允许调用 close ()。 commit () 是其替代品。如果 未调用 commit ()就将 QSaveFile 实例销毁,那么,临时文件会被丢弃。
在程序出现异常时,若想要放弃保存文件,则调用 cancelWriting (),之后, 就算妳再调用 commit ()也不会保存文件了。
参考 QTextStream 、 QDataStream 、 QFileInfo 、 QDir 、 QFile 和 QTemporaryFile 。
取消掉新文件的写入。
如果程序 在写入过程中改变了主意,那么 ,它可以调用cancelWriting(), 这样会导致设置某个错误 码,使得,调用 commit ()时会丢弃临时文件。
或者 , 也可以完全不要调用 commit ()。
调用这个方法之后,仍然可以做写入操作,只不过这些写入操作不再有实际效果,已写入的文件会被丢弃。
如果使用了直接写入的候补方式,那么这个方法没有实际效果。在某个只读目录中覆盖某个已有文件就是这样的情况:无法创建临时文件,因此,已有的文件会被无条件覆盖,而cancelWriting()无法做任何特殊的事,这将导致已有文件的内容可能发生丢失。
参考 commit () 。
如果之前的所有写入操作都成功了的话,则将变更提交到磁盘。
在保存操作的末尾必须调用这个方法,否则文件将被丢弃。
如果 在写入过程中发生过错误,那么,会删除临时文件并且返回假( false )。否则, 会将临时文件重命名为 fileName ,并且在成功的情况下返回 真( true )。最后 ,关闭设备。
参考 cancelWriting () 。
如果当前启用 了在只读目录中保存文件 的候补方案,则返回真( true )。
参考 setDirectWriteFallback () 。
允许在必要的情况下直接覆盖已有文件。
QSaveFile 会在最终文件所在的目录中创建一个临时文件,并且原子 式地将它重命名。然而 ,如果目录 的权限设置中不允许创建新文件的话,这个过程就无法完成了。 为了 确 保执行原子性操作, open () 会在无法创建临时文件的情况下失败。
为了 让用户能够在 一个有着严格权限限制的目录中编辑自己拥有写入权限的文件, 就要调用setDirectWriteFallback(),并且将 enabled 设置为真(true), 这样,后面 再调用 open (), 就会根据需要 来 使用候补方案,直接打开已有文件并且 向其中写入,而不使用临时文件。 这样做,就失去了原子性保证, 也就是说,像程序崩溃或停电之类的意外可能会导致硬盘 上的文件只被写入一半。 同时,在这种情况下, cancelWriting ()也没有效果。
一般来说,要保存用户编辑的文档,则调用setDirectWriteFallback(true),要保存程序的内部文件(配置文件、数据文件等等),则保持使用默认选项,以确保原子性。
参考 directWriteFallback () 。
未知美人
Your opinionsHxLauncher: Launch Android applications by voice commands