class QSaveFile#

QSaveFile 提供了一个用于安全写入文件的接口。 更多信息

Inheritance diagram of PySide6.QtCore.QSaveFile

概述#

方法#

注意

本文档可能包含自动从C++转换为Python的代码片段。我们始终欢迎对片段翻译做出贡献。如果您对翻译中存在的问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建票证来告知我们。

详细描述#

QSaveFile 是一个用于写入文本和二进制文件的I/O设备,在写入操作失败的情况下不会丢失现有数据。

在写入时,内容将被写入临时文件,如果没有发生错误,则commit()会将它移动到最终文件。这确保了在写入过程中发生错误时,最终文件中的数据不会被丢失,且永远不会在最终位置出现正在写入的部分文件。保存整个文档到磁盘时,始终使用QSaveFile

QSaveFile会自动检测写入过程中的错误,例如全分区情况,其中write()无法写入所有字节。它会记住发生了错误,并在commit()时放弃临时文件。

QFile类似,文件使用open()打开。数据通常使用QDataStreamQTextStream读取和写入,但也可以调用继承自QIODevice的函数read()readLine()readAll()write()

QFile不同,不允许调用close()commit()将替代它。如果未调用commit()QSaveFile实例被销毁,则临时文件将被丢弃。

由于应用程序错误而中止保存,请调用cancelWriting(),这样即使稍后调用commit()也不会保存。

__init__([parent=None])#
参数:

parentQObject

使用指定的父对象构建一个新文件对象。

__init__(name)
参数:

name – 字符串

构建一个新的文件对象来表示具有给定 name 的文件。

__init__(name, parent)
参数:
  • name – 字符串

  • parentQObject

构建一个新文件对象,使用指定的父对象来表示具有指定 name 的文件。

cancelWriting()#

取消新文件的写入。

如果应用在保存时改变主意,可以调用 cancelWriting() 方法,该方法设置一个错误代码,以便 commit() 方法将丢弃临时文件。

或者,只需确保不调用 commit()

在调用此方法后仍然可以进行进一步写入操作,但这将没有任何效果,写入的文件将被丢弃。

使用直接写入回退时,此方法没有效果。这是在只读目录中覆盖现有文件时的情况:无法创建临时文件,因此无论怎样都会覆盖现有文件,cancelWriting() 方法对此无能为力,现有文件的内容将会丢失。

另见

commit()

commit()#
返回类型:

布尔值

如果所有之前的写入都已成功,则将更改提交到磁盘。

在保存操作的最后必须调用此方法,否则文件将被丢弃。

如果写入过程中发生错误,则删除临时文件并返回 false 。否则,将其重命名为最终的 fileName 并在成功时返回 true。最后,关闭设备。

directWriteFallback()#
返回类型:

布尔值

如果启用读取只写目录中的文件的备用解决方案,则返回 true

setDirectWriteFallback(enabled)#
参数:

enabled – 布尔

在需要时允许覆盖现有文件。

QSaveFile 在与最终文件相同的目录中创建一个临时文件,并以原子的方式重命名它。但是,如果目录权限不允许创建新文件,则这不可能实现。为了保持原子性保证,当无法创建临时文件时,open() 将失败。

为了允许用户编辑具有写权限目录中的文件,请将 setDirectWriteFallback()enabled 设置为 true,那么后续对 open() 的调用将回退到直接打开现有文件并将其写入,而不使用临时文件。这样没有原子性保证,即应用程序崩溃或例如电源故障可能导致磁盘上部分写入的文件。这也意味着在这种情况下 cancelWriting() 无效。

通常,为了保存用户编辑的文档,请调用 setDirectWriteFallback(true),并为了保存应用程序内部文件(配置文件、数据文件等),保持默认设置,以确保原子性。

setFileName(name)#
参数:

name – 字符串

设置文件的 name。名称可以没有路径、相对路径或绝对路径。

另见

setFileName() fileName()