En esta página

QTemporaryFile Class

La clase QTemporaryFile es un dispositivo de E/S que opera sobre ficheros temporales. Más...

Cabecera: #include <QTemporaryFile>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Hereda: QFile

Nota: Todas las funciones de esta clase son reentrantes.

Funciones Públicas

QTemporaryFile()
QTemporaryFile(QObject *parent)
QTemporaryFile(const QString &templateName)
QTemporaryFile(const QString &templateName, QObject *parent)
(since 6.7) QTemporaryFile(const std::filesystem::path &templateName, QObject *parent = nullptr)
virtual ~QTemporaryFile()
bool autoRemove() const
QString fileTemplate() const
bool open()
bool rename(const QString &newName)
(since 6.7) bool rename(const std::filesystem::path &newName)
(since 6.11) bool renameOverwrite(const QString &newName)
(since 6.11) bool renameOverwrite(const std::filesystem::path &newName)
void setAutoRemove(bool b)
void setFileTemplate(const QString &templateName)
(since 6.7) void setFileTemplate(const std::filesystem::path &name)

Funciones Públicas Reimplementadas

virtual QString fileName() const override

Miembros Públicos Estáticos

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

Funciones Protegidas Reimplementadas

virtual bool open(QIODeviceBase::OpenMode mode) override

Descripción Detallada

QTemporaryFile se utiliza para crear ficheros temporales únicos de forma segura. El archivo se crea llamando a open(). Se garantiza que el nombre del fichero temporal es único (es decir, se garantiza que no se sobreescribe un fichero existente), y el fichero será eliminado posteriormente al destruir el objeto QTemporaryFile. Esta es una técnica importante que evita la corrupción de datos en aplicaciones que almacenan datos en ficheros temporales. El nombre del fichero se genera automáticamente, o se crea basándose en una plantilla, que se pasa al constructor de QTemporaryFile.

Ejemplo:

// 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.

Reabrir un QTemporaryFile después de llamar a close() es seguro. Mientras no se destruya el objeto QTemporaryFile, el archivo temporal único existirá y se mantendrá abierto internamente por QTemporaryFile.

El nombre del fichero temporal puede encontrarse llamando a fileName(). Tenga en cuenta que esto sólo se define después de que el archivo se abre por primera vez; la función devuelve una cadena vacía antes de esto.

Un archivo temporal tendrá una parte estática del nombre y otra parte que se calcula para que sea única. El nombre de archivo predeterminado se determinará a partir de QCoreApplication::applicationName() (en caso contrario, qt_temp) y se colocará en la ruta temporal devuelta por QDir::tempPath(). Si especifica su propio nombre de archivo, no se colocará por defecto una ruta de archivo relativa en el directorio temporal, sino que será relativa al directorio de trabajo actual.

Es importante especificar el directorio correcto si se va a llamar a la función rename(), ya que QTemporaryFile sólo puede renombrar ficheros dentro del mismo volumen / sistema de ficheros en el que se creó el propio fichero temporal.

El nombre del archivo (la parte después del último separador de ruta de directorio en la plantilla de archivo especificada) puede contener la secuencia especial "XXXXXX" (al menos seis caracteres en mayúsculas "X" ), que se sustituirá por la parte autogenerada del nombre del archivo. Si el nombre del archivo no contiene "XXXXXX", QTemporaryFile añadirá la parte generada al nombre del archivo. Sólo se tendrá en cuenta la última aparición de "XXXXXX".

Nota: En Linux, QTemporaryFile intentará crear ficheros temporales sin nombre. Si eso tiene éxito, open() devolverá true pero exists() será false. Si llama a fileName() o a cualquier función que lo llame, QTemporaryFile le dará un nombre al archivo, por lo que la mayoría de las aplicaciones no verán la diferencia.

Ver también QDir::tempPath() y QFile.

Documentación de las funciones miembro

QTemporaryFile::QTemporaryFile()

Construye un QTemporaryFile.

La plantilla de nombre de archivo predeterminada se determina a partir del nombre de la aplicación devuelto por QCoreApplication::applicationName() (o "qt_temp" si el nombre de la aplicación está vacío), seguido de ".XXXXXX". El archivo se almacena en el directorio temporal del sistema, devuelto por QDir::tempPath().

Véase también setFileTemplate(), fileTemplate(), fileName() y QDir::tempPath().

[explicit] QTemporaryFile::QTemporaryFile(QObject *parent)

Construye un QTemporaryFile con la dirección parent.

La plantilla de nombre de archivo predeterminada se determina a partir del nombre de la aplicación devuelto por QCoreApplication::applicationName() (o "qt_temp" si el nombre de la aplicación está vacío), seguido de ".XXXXXX". El archivo se almacena en el directorio temporal del sistema, devuelto por QDir::tempPath().

Véase también setFileTemplate().

[explicit] QTemporaryFile::QTemporaryFile(const QString &templateName)

Construye un QTemporaryFile con templateName como plantilla de nombre de archivo.

Al abrir el archivo temporal, se utilizará templateName para crear un nombre de archivo único.

Si el nombre de fichero (la parte después del último separador de ruta de directorio en templateName) no contiene "XXXXXX", se añadirá automáticamente.

"XXXXXX" se sustituirá por la parte dinámica del nombre de archivo, que se calcula para que sea único.

Si templateName es una ruta relativa, la ruta será relativa al directorio de trabajo actual. Puede utilizar QDir::tempPath() para construir templateName si desea utilizar el directorio temporal del sistema.

Es importante especificar el directorio correcto si se va a llamar a la función rename(), ya que QTemporaryFile sólo puede renombrar ficheros dentro del mismo volumen / sistema de ficheros en el que se creó el propio fichero temporal.

Véase también open() y fileTemplate().

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

Construye un QTemporaryFile con el parent especificado y templateName como plantilla de nombre de archivo.

Al abrir el archivo temporal, se utilizará templateName para crear un nombre de archivo único.

Si el nombre de archivo (la parte después del último separador de ruta de directorio en templateName) no contiene "XXXXXX", se añadirá automáticamente.

"XXXXXX" se sustituirá por la parte dinámica del nombre de archivo, que se calcula para que sea único.

Si templateName es una ruta relativa, la ruta será relativa al directorio de trabajo actual. Puede utilizar QDir::tempPath() para construir templateName si desea utilizar el directorio temporal del sistema. Es importante especificar el directorio correcto si se va a llamar a la función rename(), ya que QTemporaryFile sólo puede renombrar ficheros dentro del mismo volumen / sistema de ficheros en el que se creó el propio fichero temporal.

Véase también open() y fileTemplate().

[explicit, since 6.7] QTemporaryFile::QTemporaryFile(const std::filesystem::path &templateName, QObject *parent = nullptr)

Esta es una función sobrecargada.

Esta función se introdujo en Qt 6.7.

[virtual noexcept] QTemporaryFile::~QTemporaryFile()

Destruye el objeto de archivo temporal, el archivo se cierra automáticamente si es necesario y si está en modo de eliminación automática eliminará automáticamente el archivo.

Véase también autoRemove().

bool QTemporaryFile::autoRemove() const

Devuelve true si QTemporaryFile está en modo de eliminación automática. El modo de auto-eliminación borrará automáticamente el nombre del archivo del disco al destruirlo. Esto hace que sea muy fácil crear su objeto QTemporaryFile en la pila, llenarlo con datos, leer de él, y, finalmente, en el retorno de la función se limpiará automáticamente después de sí mismo.

La eliminación automática está activada por defecto.

Véase también setAutoRemove() y remove().

[static] QTemporaryFile *QTemporaryFile::createNativeFile(QFile &file)

Si file no es ya un fichero nativo, se crea un QTemporaryFile en QDir::tempPath(), se copia en él el contenido de file y se devuelve un puntero al fichero temporal. No hace nada y devuelve 0 si file ya es un fichero nativo.

Por ejemplo:

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

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

Véase también QFileInfo::isNativePath().

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

Funciona en el fileName dado en lugar de en un objeto QFile existente.

Se trata de una función sobrecargada.

[static, since 6.7] QTemporaryFile *QTemporaryFile::createNativeFile(const std::filesystem::path &fileName)

Esta es una función sobrecargada.

Esta función se introdujo en Qt 6.7.

[override virtual] QString QTemporaryFile::fileName() const

Reimplementa: QFile::fileName() const.

Devuelve el nombre de archivo único completo que respalda al objeto QTemporaryFile. Esta cadena es nula antes de que se abra el QTemporaryFile, después contendrá el fileTemplate() más caracteres adicionales para hacerlo único.

El nombre de archivo devuelto por este método es relativo o absoluto dependiendo de que la plantilla de nombre de archivo utilizada para construir este objeto (o pasada a setFileTemplate()) sea relativa o absoluta, respectivamente.

Véase también fileTemplate().

QString QTemporaryFile::fileTemplate() const

Devuelve la plantilla de nombre de archivo.

La plantilla de nombre de archivo devuelta por este método, será relativa o absoluta dependiendo de que la plantilla de nombre de archivo utilizada para construir este objeto (o pasada a setFileTemplate()) sea relativa o absoluta, respectivamente.

Véase también setFileTemplate(), fileName(), y Default File Name Template.

bool QTemporaryFile::open()

Abre un archivo temporal único en el sistema de archivos en modo QIODeviceBase::ReadWrite. Devuelve true si el archivo se abrió con éxito, o si ya estaba abierto. En caso contrario devuelve false.

Si se llama por primera vez, open() creará un nombre de archivo único basado en fileTemplate(). Se garantiza que el archivo ha sido creado por esta función (es decir, nunca ha existido antes).

Si se vuelve a abrir un archivo después de llamar a close(), se volverá a abrir el mismo archivo.

Véase también setFileTemplate() y QT_USE_NODISCARD_FILE_OPEN.

[override virtual protected] bool QTemporaryFile::open(QIODeviceBase::OpenMode mode)

Reimplementa: QFile::open(modo QIODeviceBase::OpenMode).

Abre un único archivo temporal en el sistema de archivos con mode flags. Devuelve true si el archivo se abrió con éxito, o ya estaba abierto. En caso contrario, devuelve false.

Si se llama por primera vez, open() creará un nombre de archivo único basado en fileTemplate(), y lo abrirá con mode flags. Se garantiza que el archivo ha sido creado por esta función (es decir, nunca ha existido antes).

Si se vuelve a abrir un archivo después de llamar a close(), se volverá a abrir el mismo archivo con las banderas mode.

Véase también setFileTemplate() y QT_USE_NODISCARD_FILE_OPEN.

bool QTemporaryFile::rename(const QString &newName)

Renombra el fichero temporal actual a newName y devuelve true si ha tenido éxito.

Esta función tiene una diferencia importante en comparación con QFile::rename(): no realizará una copia+borrado si la llamada al sistema de bajo nivel para renombrar el archivo falla, algo que podría ocurrir si newName especifica un archivo en un volumen o sistema de archivos diferente al que se creó el archivo temporal. En otras palabras, QTemporaryFile sólo admite el renombrado atómico de archivos.

Esta funcionalidad está pensada para soportar la materialización del fichero de destino con todos los contenidos ya presentes, de forma que otro proceso no pueda ver un fichero incompleto en proceso de escritura. La clase QSaveFile también puede utilizarse para un propósito similar, especialmente si el fichero de destino no es temporal.

Nota: Llamar a rename() no desactiva autoRemove. Si desea que el archivo renombrado persista, debe llamar a setAutoRemove y establecerlo en false después de llamar a rename(). De lo contrario, el archivo se borrará cuando se destruya el objeto QTemporaryFile.

Esta función fallará si newName ya existe. Para sustituirlo, utilice renameOverwrite() en su lugar.

Véase también renameOverwrite(), QSaveFile, QSaveFile::commit(), y QFile::rename().

[since 6.7] bool QTemporaryFile::rename(const std::filesystem::path &newName)

Esta es una función sobrecargada.

Esta función se introdujo en Qt 6.7.

[since 6.11] bool QTemporaryFile::renameOverwrite(const QString &newName)

Es lo mismo que rename(), excepto que sustituye atómicamente a newName si ya existe, como hace también QSaveFile::commit().

Devuelve false si el renombrado no puede realizarse atómicamente (por ejemplo, el archivo temporal y el nombre del archivo de destino viven en diferentes sistemas de archivos / volúmenes / unidades.

Esta función se introdujo en Qt 6.11.

Véase también rename(), QSaveFile, QSaveFile::commit(), y QFile::rename().

[since 6.11] bool QTemporaryFile::renameOverwrite(const std::filesystem::path &newName)

Esta es una función sobrecargada.

Esta función se introdujo en Qt 6.11.

void QTemporaryFile::setAutoRemove(bool b)

Pone QTemporaryFile en modo de eliminación automática si b es true.

La eliminación automática está activada por defecto.

Si establece esta propiedad en false, asegúrese de que la aplicación proporciona una forma de eliminar el archivo una vez que ya no sea necesario, incluyendo pasar la responsabilidad a otro proceso. Utilice siempre la función fileName() para obtener el nombre y nunca intente adivinar el nombre que ha generado QTemporaryFile.

En algunos sistemas, si no se llama a fileName() antes de cerrar el fichero, el fichero temporal puede ser eliminado independientemente del estado de esta propiedad. No se debe confiar en este comportamiento, por lo que el código de la aplicación debe llamar a fileName() o dejar activada la funcionalidad de eliminación automática.

Véase también autoRemove() y remove().

void QTemporaryFile::setFileTemplate(const QString &templateName)

Establece la plantilla de nombre de archivo en templateName.

Si el nombre de archivo (la parte después del último separador de ruta de directorio en templateName) no contiene "XXXXXX", se añadirá automáticamente.

"XXXXXX" se sustituirá por la parte dinámica del nombre de archivo, que se calcula para que sea único.

Si templateName es una ruta relativa, la ruta será relativa al directorio de trabajo actual. Puede utilizar QDir::tempPath() para construir templateName si desea utilizar el directorio temporal del sistema. Es importante especificar el directorio correcto si se va a llamar a la función rename(), ya que QTemporaryFile sólo puede renombrar ficheros dentro del mismo volumen / sistema de ficheros en el que se creó el propio fichero temporal.

Véase también fileTemplate() y fileName().

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

Esta es una función sobrecargada.

Esta función se introdujo en Qt 6.7.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.