- class QSaveFile#
类
QSaveFile
提供了一个用于安全写入文件的接口。 更多信息…概述#
方法#
def
__init__()
def
cancelWriting()
def
commit()
def
setFileName()
注意
本文档可能包含自动从C++转换为Python的代码片段。我们始终欢迎对片段翻译做出贡献。如果您对翻译中存在的问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建票证来告知我们。
详细描述#
QSaveFile
是一个用于写入文本和二进制文件的I/O设备,在写入操作失败的情况下不会丢失现有数据。在写入时,内容将被写入临时文件,如果没有发生错误,则
commit()
会将它移动到最终文件。这确保了在写入过程中发生错误时,最终文件中的数据不会被丢失,且永远不会在最终位置出现正在写入的部分文件。保存整个文档到磁盘时,始终使用QSaveFile
。QSaveFile
会自动检测写入过程中的错误,例如全分区情况,其中write()
无法写入所有字节。它会记住发生了错误,并在commit()
时放弃临时文件。与
QFile
类似,文件使用open()
打开。数据通常使用QDataStream
或QTextStream
读取和写入,但也可以调用继承自QIODevice
的函数read()
、readLine()
、readAll()
、write()
。与
QFile
不同,不允许调用close()
。commit()
将替代它。如果未调用commit()
且QSaveFile
实例被销毁,则临时文件将被丢弃。由于应用程序错误而中止保存,请调用
cancelWriting()
,这样即使稍后调用commit()
也不会保存。使用指定的父对象构建一个新文件对象。
- __init__(name)
- 参数:
name – 字符串
构建一个新的文件对象来表示具有给定
name
的文件。- __init__(name, parent)
- 参数:
name – 字符串
parent –
QObject
构建一个新文件对象,使用指定的父对象来表示具有指定
name
的文件。- cancelWriting()#
取消新文件的写入。
如果应用在保存时改变主意,可以调用 cancelWriting() 方法,该方法设置一个错误代码,以便
commit()
方法将丢弃临时文件。或者,只需确保不调用
commit()
。在调用此方法后仍然可以进行进一步写入操作,但这将没有任何效果,写入的文件将被丢弃。
使用直接写入回退时,此方法没有效果。这是在只读目录中覆盖现有文件时的情况:无法创建临时文件,因此无论怎样都会覆盖现有文件,cancelWriting() 方法对此无能为力,现有文件的内容将会丢失。
另见
- commit()#
- 返回类型:
布尔值
如果所有之前的写入都已成功,则将更改提交到磁盘。
在保存操作的最后必须调用此方法,否则文件将被丢弃。
如果写入过程中发生错误,则删除临时文件并返回
false
。否则,将其重命名为最终的fileName
并在成功时返回true
。最后,关闭设备。- directWriteFallback()#
- 返回类型:
布尔值
如果启用读取只写目录中的文件的备用解决方案,则返回
true
。- setDirectWriteFallback(enabled)#
- 参数:
enabled – 布尔
在需要时允许覆盖现有文件。
QSaveFile
在与最终文件相同的目录中创建一个临时文件,并以原子的方式重命名它。但是,如果目录权限不允许创建新文件,则这不可能实现。为了保持原子性保证,当无法创建临时文件时,open()
将失败。为了允许用户编辑具有写权限目录中的文件,请将
setDirectWriteFallback()
的enabled
设置为 true,那么后续对open()
的调用将回退到直接打开现有文件并将其写入,而不使用临时文件。这样没有原子性保证,即应用程序崩溃或例如电源故障可能导致磁盘上部分写入的文件。这也意味着在这种情况下cancelWriting()
无效。通常,为了保存用户编辑的文档,请调用
setDirectWriteFallback(true)
,并为了保存应用程序内部文件(配置文件、数据文件等),保持默认设置,以确保原子性。- setFileName(name)#
- 参数:
name – 字符串
设置文件的
name
。名称可以没有路径、相对路径或绝对路径。另见
setFileName()
fileName()