QSaveFile Class
La clase QSaveFile proporciona una interfaz para escribir de forma segura en archivos. Más...
| Cabecera: | #include <QSaveFile> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Hereda: | QFileDevice |
- Lista de todos los miembros, incluyendo los heredados
- QSaveFile es parte de Entrada/Salida y Redes.
Nota: Todas las funciones de esta clase son reentrantes.
Funciones Públicas
| QSaveFile(QObject *parent = nullptr) | |
| QSaveFile(const QString &name, QObject *parent = nullptr) | |
(since 6.11) | QSaveFile(const std::filesystem::path &path, QObject *parent = nullptr) |
| virtual | ~QSaveFile() |
| void | cancelWriting() |
| bool | commit() |
| bool | directWriteFallback() const |
(since 6.11) std::filesystem::path | filesystemFileName() const |
| void | setDirectWriteFallback(bool enabled) |
| void | setFileName(const QString &name) |
(since 6.11) void | setFileName(const std::filesystem::path &name) |
Funciones Públicas Reimplementadas
Funciones Protegidas Reimplementadas
| virtual qint64 | writeData(const char *data, qint64 len) override |
Descripción Detallada
QSaveFile es un dispositivo de E/S para escribir ficheros de texto y binarios, sin perder los datos existentes si la operación de escritura falla.
Mientras se escribe, el contenido se escribirá en un fichero temporal, y si no ocurre ningún error, commit() lo moverá al fichero final. Esto asegura que no se pierdan datos en el archivo final en caso de que ocurra un error mientras se escribe, y que no haya nunca un archivo parcialmente escrito en la ubicación final. Utilice siempre QSaveFile cuando guarde documentos enteros en el disco.
QSaveFile detecta automáticamente errores durante la escritura, como la situación de partición completa, en la que write() no puede escribir todos los bytes. Recordará que se ha producido un error y descartará el archivo temporal en commit().
Al igual que con QFile, el archivo se abre con open(). Los datos se suelen leer y escribir con QDataStream o QTextStream, pero también se puede llamar directamente a write().
A diferencia de QFile, no se permite llamar a close(). commit() lo sustituye. Si no se llamó a commit() y la instancia QSaveFile es destruida, el archivo temporal es descartado.
Para abortar el guardado debido a un error de la aplicación, llame a cancelWriting(), de forma que incluso una llamada a commit() más tarde no guarde.
Véase también QTextStream, QDataStream, QFileInfo, QDir, QFile, y QTemporaryFile.
Documentación de las funciones miembro
[explicit] QSaveFile::QSaveFile(QObject *parent = nullptr)
Construye un nuevo objeto archivo con la dirección parent. Es necesario llamar a setFileName() antes de open().
[explicit] QSaveFile::QSaveFile(const QString &name, QObject *parent = nullptr)
Construye un nuevo objeto de archivo con el parent dado para representar el archivo con el name especificado.
[since 6.11] QSaveFile::QSaveFile(const std::filesystem::path &path, QObject *parent = nullptr)
Construye un nuevo objeto de archivo con el parent dado para representar el archivo con el path especificado.
Esta función se introdujo en Qt 6.11.
[virtual noexcept] QSaveFile::~QSaveFile()
Destruye el objeto de archivo, descartando el contenido guardado a menos que se haya llamado a commit().
void QSaveFile::cancelWriting()
Cancela la escritura del nuevo fichero.
Si la aplicación cambia de opinión mientras guarda, puede llamar a cancelWriting(), que establece un código de error para que commit() descarte el archivo temporal.
Alternativamente, puede simplemente asegurarse de no llamar a commit().
Otras operaciones de escritura son posibles después de llamar a este método, pero ninguna de ellas tendrá efecto, el archivo escrito será descartado.
Este método no tiene efecto cuando se utiliza la escritura directa. Este es el caso cuando se guarda sobre un archivo existente en un directorio de sólo lectura: no se puede crear un archivo temporal, por lo que el archivo existente se sobrescribe pase lo que pase, y cancelWriting() no puede hacer nada al respecto, el contenido del archivo existente se perderá.
Véase también commit().
bool QSaveFile::commit()
Consigna los cambios en el disco, si todas las escrituras anteriores se han realizado correctamente.
Es obligatorio llamar a esto al final de la operación de guardado, de lo contrario el archivo será descartado.
Si se ha producido un error durante la escritura, elimina el archivo temporal y devuelve false. De lo contrario, lo renombra al final fileName y devuelve true en caso de éxito. Por último, cierra el dispositivo.
Véase también cancelWriting().
bool QSaveFile::directWriteFallback() const
Devuelve true si la solución alternativa para guardar archivos en directorios de sólo lectura está activada.
Véase también setDirectWriteFallback().
[override virtual] QString QSaveFile::fileName() const
Reimplementa: QFileDevice::fileName() const.
Devuelve el nombre establecido por setFileName() o al constructor QSaveFile.
Véase también setFileName().
[since 6.11] std::filesystem::path QSaveFile::filesystemFileName() const
Devuelve fileName() como std::filesystem::path.
Esta función se introdujo en Qt 6.11.
[override virtual] bool QSaveFile::open(QIODeviceBase::OpenMode mode)
Reimplementa: QIODevice::open(modo QIODeviceBase::OpenMode).
Abre el fichero utilizando mode flags. Devuelve true si tiene éxito; en caso contrario devuelve false.
Importante: Las banderas para mode deben incluir QIODeviceBase::WriteOnly. Otras banderas comunes que puede utilizar son Text y Unbuffered. Las banderas no soportadas por el momento son ReadOnly (y por tanto ReadWrite), Append, NewOnly y ExistingOnly; generarán una advertencia en tiempo de ejecución.
Véase también setFileName() y QT_USE_NODISCARD_FILE_OPEN.
void QSaveFile::setDirectWriteFallback(bool enabled)
Permite escribir sobre el fichero existente si es necesario.
QSaveFile crea un fichero temporal en el mismo directorio que el fichero final y lo renombra atómicamente. Sin embargo, esto no es posible si los permisos del directorio no permiten crear nuevos archivos. Para preservar las garantías de atomicidad, open() falla cuando no puede crear el archivo temporal.
Para permitir que los usuarios editen archivos con permisos de escritura en un directorio con permisos restringidos, llame a setDirectWriteFallback() con enabled a true, y las siguientes llamadas a open() volverán a abrir el archivo existente directamente y escribir en él, sin usar un archivo temporal. Esto no tiene garantías de atomicidad, es decir, un fallo de la aplicación o, por ejemplo, un corte de energía podría llevar a un archivo parcialmente escrito en el disco. También significa que cancelWriting() no tiene ningún efecto, en tal caso.
Normalmente, para guardar documentos editados por el usuario, llame a setDirectWriteFallback(true), y para guardar archivos internos de la aplicación (archivos de configuración, archivos de datos, ...), mantenga la configuración por defecto que asegura la atomicidad.
Véase también directWriteFallback().
void QSaveFile::setFileName(const QString &name)
Establece la dirección name del archivo. El nombre puede no tener ruta, tener una ruta relativa o una ruta absoluta.
Véase también QFile::setFileName() y fileName().
[since 6.11] void QSaveFile::setFileName(const std::filesystem::path &name)
Esta es una función sobrecargada.
Esta función se introdujo en Qt 6.11.
[override virtual protected] qint64 QSaveFile::writeData(const char *data, qint64 len)
Reimplementa: QFileDevice::writeData(const char *data, qint64 len).
© 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.