QTemporaryFile 类

QTemporaryFile 类是一个操作临时文件的 I/O 设备。更多...

头文件 #include <QTemporaryFile>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承自 QFile

注意:本类中所有函数都是重入的.

公开函数

QTemporaryFile()
QTemporaryFile(const QString &templateName)
QTemporaryFile(QObject *parent)
QTemporaryFile(const QString &templateName, QObject *parent)
(since 6.7) QTemporaryFile(const std::filesystem::path &templateName, QObject *parent = nullptr)
virtual~QTemporaryFile()
boolautoRemove() const
QStringfileTemplate() const
bool打开()
boolrename(const QString &newName)
(since 6.7) boolrename(const std::filesystem::path &newName)
voidsetAutoRemove(bool b)
voidsetFileTemplate(const QString &name)
(since 6.7) voidsetFileTemplate(const std::filesystem::path &name)

重实现的公开函数

virtual QStringfileName() const override

静态公开成员

QTemporaryFile *createNativeFile(QFile &file)
QTemporaryFile *createNativeFile(const QString &fileName)
(since 6.7) QTemporaryFile *createNativeFile(const std::filesystem::path &fileName)

重实现的保护函数

virtual boolopen(QIODeviceBase::OpenMode flags) override

详细说明

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

示例

    // Within a function/method...

    QTemporaryFile file;
    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 对象自身没有被销毁,唯一的临时文件将存在,并且将由 QTemporaryFile 内部保持打开状态。

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

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

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

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

另请参阅QDir::tempPath() 和 QFile

成员函数文档

QTemporaryFile::QTemporaryFile()

使用由QCoreApplication::applicationName()返回的应用程序名称(否则为qt_temp)后跟".XXXXXX"作为文件模板构造 QTemporaryFile。文件存储在系统的临时目录中,即QDir::tempPath

另请参阅setFileTemplate()和QDir::tempPath

[显式] QTemporaryFile::QTemporaryFile(const QString &templateName)

使用模板文件名templateName构造 QTemporaryFile。在打开临时文件时,将使用此名称创建一个唯一的文件名。

如果templateName不包含XXXXXX,它将自动附加并用作文件名的动态部分。

如果 templateName 是一个相对路径,该路径将相对于当前工作目录。如果您想使用系统的临时目录,可以使用 QDir::tempPath() 来构造 templateName。如果将调用rename() 函数,确保指定正确的目录是重要的,因为 QTemporaryFile 只能重命名与临时文件本身所创建的同一卷 / 文件系统中的文件。

另请参阅 open() 以及 fileTemplate

[显式] QTemporaryFile::QTemporaryFile(QObject *parent)

使用 QCoreApplication::applicationName() 返回的(否则为 qt_temp)应用程序名称作为文件模板,后跟 ".XXXXXX" 来构造一个 QTemporaryFile(带有给定的 parent)。文件存储在系统的临时目录 QDir::tempPath() 中。

另请参阅 setFileTemplate

QTemporaryFile::QTemporaryFile(const QString &templateName, QObject *parent)

使用文件模板 templateName 和指定的 parent 来构造一个 QTemporaryFile。在打开临时文件时,将使用此模板创建一个唯一的文件名。

如果templateName不包含XXXXXX,它将自动附加并用作文件名的动态部分。

如果 templateName 是一个相对路径,该路径将相对于当前工作目录。如果您想使用系统的临时目录,可以使用 QDir::tempPath() 来构造 templateName。如果将调用rename() 函数,确保指定正确的目录是重要的,因为 QTemporaryFile 只能重命名与临时文件本身所创建的同一卷 / 文件系统中的文件。

另请参阅 open() 以及 fileTemplate

[显式,自 6.7 版本起] QTemporaryFile::QTemporaryFile(const std::filesystem::path &templateName, QObject *parent = nullptr)

这是一个重载函数。

此函数是在 Qt 6.7 中引入的。

[虚,noexcept] QTemporaryFile::~QTemporaryFile()

销毁临时文件对象,如果需要并且处于自动删除模式,将自动删除文件。

另请参阅 autoRemove

bool QTemporaryFile::autoRemove() const

如果 QTemporaryFile 处于自动删除模式,则返回 true。自动删除模式在销毁时将自动从磁盘删除文件名。这使得在堆栈上创建您的 QTemporaryFile 对象、填充数据、读取数据,最后在函数返回时自动清理变得非常简单。

默认情况下自动删除是开启的。

另请参阅 setAutoRemoveremove

[静态] QTemporaryFile *QTemporaryFile::createNativeFile(QFile &file)

如果 file 还不是一个原生文件,则在 QDir::tempPath() 中创建一个 QTemporaryFile,将 file 的内容复制进去,并返回临时文件的指针。如果 file 已经是一个原生文件,则不执行任何操作并返回 0

例如

  QFile f(":/resources/file.txt");
  QTemporaryFile::createNativeFile(f); // Returns a pointer to a temporary file

  QFile f("/users/qt/file.txt");
  QTemporaryFile::createNativeFile(f); // Returns 0

另请参阅 QFileInfo::isNativePath

[静态] QTemporaryFile *QTemporaryFile::createNativeFile(const QString &fileName)

这是一个重载函数。

在给定的 fileName 上工作,而不是现有的 QFile 对象。

[静态,自 6.7 版本起] QTemporaryFile *QTemporaryFile::createNativeFile(const std::filesystem::path &fileName)

这是一个重载函数。

此函数是在 Qt 6.7 中引入的。

[重写虚函数] QString QTemporaryFile::fileName() const

重实: QFile::fileName() const.

返回支撑 QTemporaryFile 对象的唯一完整文件名。在打开 QTemporaryFile 之前,此字符串为空,之后它将包含 fileTemplate() 加上一些使其唯一的额外字符。

参见 fileTemplate().

QString QTemporaryFile::fileTemplate() const

返回设置的文件模板。默认文件模板名为 qcoreappname.XXXXXX,并位于 QDir::tempPath()。

另请参阅 setFileTemplate

bool QTemporaryFile::open()

QTemporaryFile 总是在 QIODevice::ReadWrite 模式下打开,这使得轻松访问文件中的数据。此函数成功时返回 true,并将 fileName() 设置为使用的唯一文件名。

参见 fileName().

[重写虚保护函数] bool QTemporaryFile::open(QIODeviceBase::OpenMode flags)

重实: QFile::open(QIODeviceBase::OpenMode mode).

为临时文件创建唯一文件名,并打开它。您可以通过调用 fileName() 在以后获取唯一名称。该文件确保被此函数创建(即,它以前从未存在过)。

bool QTemporaryFile::rename(const QString &newName)

将当前临时文件重命名为 newName,如果成功则返回 true。

此函数与 QFile::rename 有一个重要的区别:如果低级系统调用重命名文件失败(这可能发生在 newName 指定了一个与临时文件创建在的不同卷或文件系统中的文件时),它不会执行复制+删除操作。换句话说,QTemporaryFile 只支持原子的文件重命名。

此功能旨在支持以所有内容都存在的方式实现目标文件,因此另一个进程无法看到正在写入过程中不完整的文件。QSaveFile 类也可以用于类似目的,尤其是如果目标文件不是临时文件的话。

参见 QSaveFileQSaveFile::commit(),和 QFile::rename().

[自 6.7 版本起] bool QTemporaryFile::rename(const std::filesystem::path &newName)

这是一个重载函数。

此函数是在 Qt 6.7 中引入的。

void QTemporaryFile::setAutoRemove(bool b)

如果 btrue,则将 QTemporaryFile 设置为自动删除模式。

默认情况下自动删除是开启的。

如果您将此属性设置为 true,请确保应用程序能够在不再需要文件时提供删除文件的方式,包括将责任转移到另一个进程。始终使用 fileName() 函数来获取名称,切勿尝试猜测 QTemporaryFile 生成的名称。

在某些系统上,如果在关闭文件之前没有调用 fileName(),则无论此属性的状态如何,临时文件可能会被删除。不应依赖于这种行为,因此应用程序代码应该调用 fileName() 或启用自动删除功能。

另请参阅autoRemove() 和 remove()。

void QTemporaryFile::setFileTemplate(const QString &name)

将文件名静态部分设置为 name。如果文件模板包含 XXXXXX,则将自动替换为文件名的唯一部分;否则,将根据指定的静态部分自动确定文件名。

如果 name 包含相对文件路径,则路径相对于当前工作目录。如果您想使用系统的临时目录,可以使用 QDir::tempPath() 构造 name。如果将调用 rename() 函数,请指定正确的目录,因为 QTemporaryFile 只能将其本身创建的临时文件重命名到同一卷/文件系统内部。

参见 fileTemplate().

[since 6.7] void QTemporaryFile::setFileTemplate(const std::filesystem::path &name)

这是一个重载函数。

此函数是在 Qt 6.7 中引入的。

© 2024 Qt 公司有限。此处包含的文档贡献均为各自所有者的版权。本处提供的文档按自由软件基金会发布的 GNU 自由文档许可版 1.3 的条款进行许可。Qt 及其相关标志是芬兰以及/或其他全球范围 Qt 公司的商标。所有其他商标均为各自所有者的财产。