StupidBeauty
Read times:3472Posted at:Wed Aug 16 12:47:55 2017 - no title specified

Qt5.9开发文档翻译:QSaveFile,QSaveFile Class

QSaveFile 类,提供一个用于安全地写入文件的接口。 详细说明……

头文件:

#include <QSaveFile>

qmake指令

QT += core

自此版本开始引入:

Qt 5.1

继承自:

QFileDevice

注意 这个类中的所有函数都是 可重入的

详细说明

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

成员函数文档

void  QSaveFile:: cancelWriting ()

取消掉新文件的写入。

如果程序 在写入过程中改变了主意,那么 ,它可以调用cancelWriting(), 这样会导致设置某个错误 码,使得,调用 commit ()时会丢弃临时文件。

或者 也可以完全不要调用 commit ()。

调用这个方法之后,仍然可以做写入操作,只不过这些写入操作不再有实际效果,已写入的文件会被丢弃。

如果使用了直接写入的候补方式,那么这个方法没有实际效果。在某个只读目录中覆盖某个已有文件就是这样的情况:无法创建临时文件,因此,已有的文件会被无条件覆盖,而cancelWriting()无法做任何特殊的事,这将导致已有文件的内容可能发生丢失。

参考 commit ()

bool QSaveFile::commit()

如果之前的所有写入操作都成功了的话,则将变更提交到磁盘。

在保存操作的末尾必须调用这个方法,否则文件将被丢弃。

如果 在写入过程中发生过错误,那么,会删除临时文件并且返回假( false )。否则, 会将临时文件重命名为 fileName ,并且在成功的情况下返回 真( true )。最后 ,关闭设备。

参考 cancelWriting ()

bool QSaveFile::directWriteFallback() const

如果当前启用 了在只读目录中保存文件 的候补方案,则返回真( true )。

参考 setDirectWriteFallback ()

void  QSaveFile:: setDirectWriteFallback ( bool enabled )

允许在必要的情况下直接覆盖已有文件。

QSaveFile 会在最终文件所在的目录中创建一个临时文件,并且原子 式地将它重命名。然而 ,如果目录 的权限设置中不允许创建新文件的话,这个过程就无法完成了。 为了 保执行原子性操作, open () 会在无法创建临时文件的情况下失败。

为了 让用户能够在 一个有着严格权限限制的目录中编辑自己拥有写入权限的文件, 就要调用setDirectWriteFallback(),并且将 enabled 设置为真(true), 这样,后面 再调用 open (), 就会根据需要 使用候补方案,直接打开已有文件并且 向其中写入,而不使用临时文件。 这样做,就失去了原子性保证, 也就是说,像程序崩溃或停电之类的意外可能会导致硬盘 上的文件只被写入一半。 同时,在这种情况下, cancelWriting ()也没有效果。

一般来说,要保存用户编辑的文档,则调用setDirectWriteFallback(true),要保存程序的内部文件(配置文件、数据文件等等),则保持使用默认选项,以确保原子性。

参考 directWriteFallback ()

https://drive.google.com/drive/folders/0B7YLC_Rq9v9IfmRNaDFTeFJfLXAtMUgtRlZLU0Y0QWVtbkt2QXpBR18yR3pQVXBnd0VsMTA

未知美人

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands