107-临时数据-临时文件QTemporaryFile

临时数据

文件可以用QFile打开并可以读写数据,另外在进行科学计算时,计算过程中产生的中间临时数据可以写到临时文件或缓存中,程序退出时自动删除临时文件和缓存中的数据

临时文件QTemporaryFile

QTemporaryFile类是一个对临时文件进行操作的I/O设备。

在进行大型科学运算时,通常会产生大量的中间结果数据

  • 例如进行有限元计算时,一个规模巨大的刚度矩阵、质量矩阵和迭代过程中的中间结果会达到几十 GB 或上百 GB甚至更多,如果把这些数据放到内存中通常是放不下的。
    • 需要把这些数据放到临时文件中,并保证临时文件不会覆盖现有的文件,计算过程中读取临时文件中的数据进行运算,计算结束后则自动删除临时文件。

QTemporaryFile类用于创建临时文件它继承自QFile,当用Open()方法打开设备时创建临时文件,并保证临时文件名是唯一的,不会和本机上的文件同名。

用QTemporaryFile创建临时文件对象的方法如下其中templateName是文件名称模板或者不用模板而用指定文件名,parent 是继承自QObject类的实例对象。

模板的文件名中包含6个或6个以上的大写"X"扩展名可以自已指定,例如QTemporaryFile"XXXXXXXXsdb")QTemporaryFile(“abXXXXXXXXcdsdb”)。

  • 如果没有使用模板而使用具体文件名,则临时文件名是在文件名基础上添加新的扩展名,
  • 如果指定了父对象则用应用程序的名称(用app.setApplicationName(str)设置)再加上新的扩展名作为临时文件名。
  • 如果没有使用模板或指定文件名,则存放临时文件的路径是系统临时路径,可以通过QDir.tempPath()方法获取系统临时路径;
  • 如果使用模板或指定文件名,则存放到当前路径下,当前路径可以用QDir.currentPath()方法查询。
from PySide6.QtCore import QTemporaryFile

QTemporaryFile(self)-> None
QTemporaryFile(parent: PySide6.QtCore.QObject)-> None
QTemporaryFile(templateName: str)-> None
QTemporaryFile(templateName: str,parent: PySide6.QtCore.QObject)-> None
临时文件QTemporaryFile说明

QTemporaryFile用于安全地创建唯一的临时文件。文件本身是通过调用open()创建的。临时文件的名称保证是唯一的(即,保证不会覆盖现有文件),并且该文件将在QTemporaryFile对象销毁后被删除。对于将数据存储在临时文件中的应用程序来说,这是一项避免数据损坏的重要技术。文件名要么是自动生成的,要么是基于模板创建的,模板会传递给QTemporaryFile的构造函数。

例子:

# Within a function/method...
file = QTemporaryFile()
if file.open():
    # file.fileName()returns the unique file name

# The QTemporaryFile destructor removes the temporary file
# as it goes out of scope.

在调用close()之后重新打开QTemporaryFile是安全的。只要QTemporaryFile对象本身没有被销毁,唯一的临时文件就会存在,并由QTemporary file在内部保持打开。

可以通过调用fileName()找到临时文件的文件名。请注意,这仅在首次打开文件后定义;函数在此之前返回一个空字符串。

临时文件将具有名称的某些静态部分和计算为唯一的部分。默认文件名将由applicationName()确定(否则为qt_temp),并将被放置到tempPath()返回的临时路径中。如果指定自己的文件名,则默认情况下,相对文件路径不会放置在临时目录中,而是相对于当前工作目录。如果要调用rename()函数,指定正确的目录是很重要的,因为QTemporaryFile只能重命名与创建临时文件相同的卷/文件系统中的文件。

指定的文件名可以包含以下模板XXXXXX(六个大写"X"字符),该模板将被文件名的自动生成部分取代。请注意,该模板区分大小写。如果文件名中没有模板,QTemporaryFile会将生成的零件附加到给定的文件名中。

在Linux上,QTemporaryFile将尝试创建未命名的临时文件。如果成功,open()将返回true,但exists()将为false。如果您调用fileName()或任何调用它的函数,QTemporaryFile将为文件命名,因此大多数应用程序不会看到任何区别。

临时文件QTemporaryFile方法

QTemporaryFile 的常用方法如表所示。

  • 创建临时文件对象后,用open()方法打开文件,这时生成临时文件,
  • 临时文件名可以用fileName()方法获取,
  • 临时文件的打开方式是读写模式(QIODeviceBase,ReadWrite)。
  • 打开临时文件后,可以按照前面介绍的写人和读取方法来读写数据。
  • 用setAutoRemove(bool)方法设置临时文件对象销毁后临时文件是否自动删除,默认为 True。
QTemporaryFile的方法及参数类型返回值的类型说甲 明
open()bool创建并打开临时文件
QTemporaryFile将始终以QIODevice::ReadWrite模式打开,这允许轻松访问文件中的数据。成功后,此函数将返回true,并将fileName()设置为所使用的唯一文件名。
fileName()str获取临时文件名和路径
setAutoRemove(b:bool)None设置是否自动删除临时文件
如果b为true,则将QTemporaryFile设置为自动删除模式。
默认情况下,"自动删除"处于启用状态。
如果将此属性设置为false,请确保应用程序在不再需要该文件时提供删除该文件的方法,包括将责任传递给另一个进程。始终使用fileName()函数获取名称,并且永远不要尝试猜测QTemporaryFile生成的名称。
在某些系统上,如果在关闭文件之前未调用fileName(),则无论此属性的状态如何,都可能删除临时文件。不应依赖此行为,因此应用程序代码应调用fileName()或启用自动删除功能。
autoRemove()bool获取是否自动删除临时文件
如果QTemporaryFile处于自动删除模式,则返回true。自动删除模式将在销毁时自动从磁盘中删除文件名。这使得在堆栈上创建QTemporaryFile对象变得非常容易,用数据填充它,从中读取,最后在函数返回时,它会自动清理。
默认情况下,"自动删除"处于启用状态。
setFileTemplate(name:str)None设置临时文件的模板
将文件名的静态部分设置为name。如果文件模板包含XXXXXX,该XXXXXX将自动替换为文件名的唯一部分,否则将根据指定的静态部分自动确定文件名。
如果名称包含相对文件路径,则该路径将相对于当前工作目录。如果您想使用系统的临时目录,可以使用tempPath()来构造名称。如果要调用rename()函数,指定正确的目录是很重要的,因为QTemporaryFile只能重命名与创建临时文件相同的卷/文件系统中的文件。
fileTemplate()str返回设置的文件模板。默认文件模板将被称为qcoreappname.XXXXXXX,并被放置在tempPath()中。
createNativeFile(file:PySide6.QtCore.QFile)PySide6.QtCore.QTemporaryFile如果文件还不是本机文件,则在tempPath()中创建一个QTemporaryFile,将文件的内容复制到其中,并返回指向临时文件的指针。如果文件已经是本机文件,则不执行任何操作并返回0。
f = QFile(“:/resources/file.txt”)
QTemporaryFile.createNativeFile(f)# Returns a pointer to a temporary file
f = QFile(“/users/qt/file.txt”)
QTemporaryFile.createNativeFile(f)# Returns 0
createNativeFile(fileName:str)PySide6.QtCore.QTemporaryFile这是一个重载函数。
处理给定的fileName,而不是现有的QFile对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt中,可以使用QTemporaryFile类来创建临时文件,并获取其地址。通过调用QTemporaryFilefileName()函数,可以获取临时文件的绝对路径。\[1\]例如: QTemporaryFile tempFile; tempFile.open(); QString filePath = tempFile.fileName(); 此时,filePath变量中存储了临时文件的地址。 另外,如果你需要获取文件的绝对路径,可以使用QFileInfo类。通过调用QFileInfo的absoluteFilePath()函数,可以获取文件的绝对路径。\[2\]例如: QFileInfo fileInfo("c:/temp/foo"); QString absolutePath = fileInfo.absoluteFilePath(); 在Windows下,盘符会自动转换为大写。所以,absolutePath变量中存储的路径会是"C:/temp/foo"。 如果你想获取"我的文档"路径,可以使用QStandardPaths类。通过调用QStandardPaths的writableLocation()函数,并传入QStandardPaths::DocumentsLocation参数,可以获取"我的文档"路径。\[3\]例如: QString documentsPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); documentsPath变量中存储了"我的文档"路径。 综上所述,你可以使用QTemporaryFile类来创建临时文件并获取其地址,使用QFileInfo类来获取文件的绝对路径,以及使用QStandardPaths类来获取"我的文档"路径。 #### 引用[.reference_title] - *1* *2* [总结Qt中常用文件信息QFileInfo的获取:后缀,名称,路径,链接](https://blog.csdn.net/poolooloo/article/details/126251197)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Qt获取程序所在目录、用户目录、临时文件夹、桌面](https://blog.csdn.net/xuefu2008/article/details/120508600)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值