PySide6.QtCore.QSaveFile¶
- class 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()也不会保存。使用给定的
parent构造一个新的文件对象。- __init__(name)
- Parameters:
name – str
构造一个新的文件对象来表示具有给定
name的文件。- __init__(name, parent)
- Parameters:
name – str
parent –
QObject
使用给定的
parent构造一个新的文件对象,以表示具有指定name的文件。- cancelWriting()¶
取消写入新文件。
如果应用程序在保存过程中改变主意,它可以调用cancelWriting(),这将设置一个错误代码,以便
commit()将丢弃临时文件。或者,它可以简单地确保不调用
commit()。调用此方法后,仍可进行进一步的写入操作,但这些操作都不会产生任何效果,写入的文件将被丢弃。
当使用直接写入回退时,此方法无效。这种情况发生在只读目录中保存现有文件时:无法创建临时文件,因此无论如何都会覆盖现有文件,cancelWriting() 对此无能为力,现有文件的内容将会丢失。
另请参阅
- commit()¶
- Return type:
布尔
如果所有先前的写入都成功,则将更改提交到磁盘。
在保存操作结束时必须调用此操作,否则文件将被丢弃。
如果在写入过程中发生错误,删除临时文件并返回
false。否则,将其重命名为最终的fileName并在成功时返回true。最后,关闭设备。另请参阅
- directWriteFallback()¶
- Return type:
布尔
如果启用了在只读目录中保存文件的回退解决方案,则返回
true。- setDirectWriteFallback(enabled)¶
- Parameters:
enabled – 布尔值
如果必要,允许覆盖现有文件。
QSaveFile在与最终文件相同的目录中创建一个临时文件,并以原子方式重命名它。但是,如果目录权限不允许创建新文件,则无法实现这一点。为了保持原子性保证,当无法创建临时文件时,open()会失败。为了允许用户在权限受限的目录中编辑具有写权限的文件,调用 setDirectWriteFallback() 并将
enabled设置为 true,随后对open()的调用将回退为直接打开现有文件并写入,而不使用临时文件。这不具有原子性保证,即应用程序崩溃或例如电源故障可能导致磁盘上出现部分写入的文件。这也意味着在这种情况下,cancelWriting()无效。通常,为了保存用户编辑的文档,调用 setDirectWriteFallback(true),而为了保存应用程序内部文件(配置文件、数据文件等),保持默认设置以确保原子性。
- setFileName(name)¶
- Parameters:
name – str
设置文件的
name。名称可以没有路径、相对路径或绝对路径。另请参阅
setFileName()fileName()