QFileDevice Class
La clase QFileDevice proporciona una interfaz para leer y escribir en ficheros abiertos. Más...
| Cabecera: | #include <QFileDevice> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Hereda: | QIODevice |
| Heredado por: |
- Lista de todos los miembros, incluyendo los heredados
- QFileDevice es parte de Input/Output y Networking.
Nota: Todas las funciones de esta clase son reentrantes.
Tipos Públicos
| enum | FileError { NoError, ReadError, WriteError, FatalError, ResourceError, …, CopyError } |
| enum | FileHandleFlag { AutoCloseHandle, DontCloseHandle } |
| flags | FileHandleFlags |
| enum | FileTime { FileAccessTime, FileBirthTime, FileMetadataChangeTime, FileModificationTime } |
| enum | MemoryMapFlag { NoOptions, MapPrivateOption } |
| flags | MemoryMapFlags |
| enum | Permission { ReadOwner, WriteOwner, ExeOwner, ReadUser, WriteUser, …, ExeOther } |
| flags | Permissions |
Funciones Públicas
| virtual | ~QFileDevice() |
| QFileDevice::FileError | error() const |
| virtual QString | fileName() const |
| QDateTime | fileTime(QFileDevice::FileTime time) const |
| bool | flush() |
| int | handle() const |
| uchar * | map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = NoOptions) |
| virtual QFileDevice::Permissions | permissions() const |
| virtual bool | resize(qint64 sz) |
| bool | setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime) |
| virtual bool | setPermissions(QFileDevice::Permissions permissions) |
| bool | unmap(uchar *address) |
| void | unsetError() |
Funciones Públicas Reimplementadas
| virtual bool | atEnd() const override |
| virtual void | close() override |
| virtual bool | isSequential() const override |
| virtual qint64 | pos() const override |
| virtual bool | seek(qint64 pos) override |
| virtual qint64 | size() const override |
Funciones Protegidas Reimplementadas
| virtual qint64 | readData(char *data, qint64 len) override |
| virtual qint64 | readLineData(char *data, qint64 maxlen) override |
| virtual qint64 | writeData(const char *data, qint64 len) override |
Macros
(since 6.8) | QT_NO_USE_NODISCARD_FILE_OPEN |
(since 6.8) | QT_USE_NODISCARD_FILE_OPEN |
Descripción Detallada
QFileDevice es la clase base para dispositivos de E/S que pueden leer y escribir ficheros y recursos de texto y binarios. QFile ofrece la funcionalidad principal, QFileDevice sirve como clase base para compartir funcionalidad con otros dispositivos de ficheros como QSaveFile, proporcionando todas las operaciones que se pueden realizar sobre ficheros que han sido abiertos por QFile o QSaveFile.
Véase también QFile y QSaveFile.
Documentación de tipos de miembros
enum QFileDevice::FileError
Este enum describe los errores que puede devolver la función error().
| Constante | Valor | Descripción |
|---|---|---|
QFileDevice::NoError | 0 | No se ha producido ningún error. |
QFileDevice::ReadError | 1 | Se ha producido un error al leer del archivo. |
QFileDevice::WriteError | 2 | Se ha producido un error al escribir en el archivo. |
QFileDevice::FatalError | 3 | Se ha producido un error fatal. |
QFileDevice::ResourceError | 4 | Sin recursos (por ejemplo, demasiados archivos abiertos, sin memoria, etc.) |
QFileDevice::OpenError | 5 | No se ha podido abrir el fichero. |
QFileDevice::AbortError | 6 | Se ha interrumpido la operación. |
QFileDevice::TimeOutError | 7 | Se ha agotado el tiempo de espera. |
QFileDevice::UnspecifiedError | 8 | Se ha producido un error no especificado. |
QFileDevice::RemoveError | 9 | No se ha podido eliminar el fichero. |
QFileDevice::RenameError | 10 | No se ha podido cambiar el nombre del fichero. |
QFileDevice::PositionError | 11 | No se ha podido cambiar la posición del fichero. |
QFileDevice::ResizeError | 12 | No se ha podido cambiar el tamaño del fichero. |
QFileDevice::PermissionsError | 13 | No se ha podido acceder al fichero. |
QFileDevice::CopyError | 14 | No se ha podido copiar el fichero. |
enum QFileDevice::FileHandleFlag
flags QFileDevice::FileHandleFlags
Este enum se utiliza al abrir un fichero para especificar opciones adicionales que sólo se aplican a ficheros y no a un QIODevice genérico.
| Constante | Valor | Descripción |
|---|---|---|
QFileDevice::AutoCloseHandle | 0x0001 | El manejador de fichero pasado a open() debe ser cerrado por close(), el comportamiento por defecto es que close simplemente descarga el fichero y la aplicación es responsable de cerrar el manejador de fichero. Cuando se abre un archivo por su nombre, esta bandera se ignora ya que Qt siempre posee el manejador del archivo y debe cerrarlo. |
QFileDevice::DontCloseHandle | 0 | Si no se cierra explícitamente, el gestor de archivo subyacente se deja abierto cuando se destruye el objeto QFile. |
El tipo FileHandleFlags es un typedef para QFlags<FileHandleFlag>. Almacena una combinación OR de valores FileHandleFlag.
enum QFileDevice::FileTime
Este enum es utilizado por las funciones fileTime() y setFileTime().
| Constante | Valor | Descripción |
|---|---|---|
QFileDevice::FileAccessTime | 0 | Cuando se accedió más recientemente al archivo (por ejemplo, cuando se leyó o escribió en él). |
QFileDevice::FileBirthTime | 1 | Cuándo se creó el archivo (puede no estar soportado en UNIX). |
QFileDevice::FileMetadataChangeTime | 2 | Cuándo se modificaron por última vez los metadatos del archivo. |
QFileDevice::FileModificationTime | 3 | Cuando se modificó el archivo por última vez. |
Véase también setFileTime(), fileTime() y QFileInfo::fileTime().
enum QFileDevice::MemoryMapFlag
flags QFileDevice::MemoryMapFlags
Este enum describe opciones especiales que pueden ser usadas por la función map().
| Constante | Valor | Descripción |
|---|---|---|
QFileDevice::NoOptions | 0 | Sin opciones. |
QFileDevice::MapPrivateOption | 0x0001 | La memoria mapeada será privada, por lo que cualquier modificación no será visible para otros procesos y no se escribirá en disco. Dichas modificaciones se perderán cuando la memoria se desasigne. No se especifica si las modificaciones realizadas en el fichero después de crear la asignación serán visibles a través de la memoria asignada. Este valor enum se introdujo en Qt 5.4. |
El tipo MemoryMapFlags es un typedef para QFlags<MemoryMapFlag>. Almacena una combinación OR de valores MemoryMapFlag.
enum QFileDevice::Permission
flags QFileDevice::Permissions
Este enum es utilizado por la función permission() para informar de los permisos y la propiedad de un fichero. Los valores pueden ser OR-ed juntos para probar múltiples permisos y valores de propiedad.
| Constante | Valor | Descripción |
|---|---|---|
QFileDevice::ReadOwner | 0x4000 | El propietario del archivo puede leerlo. |
QFileDevice::WriteOwner | 0x2000 | El propietario del archivo puede escribir en él. |
QFileDevice::ExeOwner | 0x1000 | El archivo es ejecutable por el propietario del archivo. |
QFileDevice::ReadUser | 0x0400 | El usuario puede leer el archivo. |
QFileDevice::WriteUser | 0x0200 | El usuario puede escribir en el archivo. |
QFileDevice::ExeUser | 0x0100 | El archivo es ejecutable por el usuario. |
QFileDevice::ReadGroup | 0x0040 | El archivo puede ser leído por el grupo. |
QFileDevice::WriteGroup | 0x0020 | El fichero puede ser escrito por el grupo. |
QFileDevice::ExeGroup | 0x0010 | El fichero es ejecutable por el grupo. |
QFileDevice::ReadOther | 0x0004 | El fichero puede ser leído por otros. |
QFileDevice::WriteOther | 0x0002 | El fichero puede ser escrito por otros. |
QFileDevice::ExeOther | 0x0001 | El archivo es ejecutable por otros. |
Advertencia: Debido a las diferencias en las plataformas soportadas por Qt, la semántica de ReadUser, WriteUser y ExeUser depende de la plataforma: En Unix, se devuelven los derechos del propietario del fichero y en Windows se devuelven los derechos del usuario actual. Este comportamiento podría cambiar en una futura versión de Qt.
Nota: En los sistemas de archivos NTFS, la comprobación de la propiedad y los permisos está desactivada por defecto por razones de rendimiento. Para habilitarla, incluya la siguiente línea:
extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
La comprobación de permisos se activa y desactiva incrementando y disminuyendo qt_ntfs_permission_lookup en 1.
qt_ntfs_permission_lookup++; // turn checking on qt_ntfs_permission_lookup--; // turn it off again
Nota: Dado que se trata de una variable global no atómica, sólo es seguro incrementar o decrementar qt_ntfs_permission_lookup antes de que cualquier hilo distinto del hilo principal se haya iniciado o después de que cada hilo distinto del hilo principal haya finalizado.
Nota: A partir de Qt 6.6 la variable qt_ntfs_permission_lookup está obsoleta. Por favor, utiliza las siguientes alternativas.
La forma segura y fácil de gestionar las comprobaciones de permisos es usar la clase RAII QNtfsPermissionCheckGuard.
void complexFunction() { QNtfsPermissionCheckGuard permissionGuard; // check is enabled // do complex things here that need permission check enabled } // as the guard goes out of scope the check is disabled
Si necesita un control más fino, es posible gestionar el permiso con las siguientes funciones en su lugar:
qAreNtfsPermissionChecksEnabled(); // comprobar estadoqEnableNtfsPermissionChecks(); // turn checking on qDisableNtfsPermissionChecks(); // turn it off again
El tipo Permissions es un typedef para QFlags<Permission>. Almacena una combinación OR de valores de Permiso.
Documentación de las funciones miembro
[virtual noexcept] QFileDevice::~QFileDevice()
Destruye el dispositivo de archivo, cerrándolo si es necesario.
[override virtual] bool QFileDevice::atEnd() const
Reimplementa: QIODevice::atEnd() const.
Devuelve true si se ha alcanzado el final del archivo; en caso contrario devuelve false.
Para archivos vacíos normales en Unix (por ejemplo, los de /proc), esta función devuelve true, ya que el sistema de archivos informa de que el tamaño de un archivo de este tipo es 0. Por lo tanto, no debe depender de atEnd() al leer datos de un archivo de este tipo, sino llamar a read() hasta que no se puedan leer más datos.
[override virtual] void QFileDevice::close()
Reimplementa: QIODevice::close().
Llama a QFileDevice::flush() y cierra el fichero. Los errores de descarga se ignoran.
Véase también QIODevice::close().
QFileDevice::FileError QFileDevice::error() const
Devuelve el estado de error del archivo.
El estado del dispositivo de E/S devuelve un código de error. Por ejemplo, si open() devuelve false, o una operación de lectura/escritura devuelve -1, se puede llamar a esta función para averiguar la razón por la que falló la operación.
Véase también unsetError().
[virtual] QString QFileDevice::fileName() const
Devuelve el nombre del archivo. La implementación por defecto en QFileDevice devuelve una cadena nula.
QDateTime QFileDevice::fileTime(QFileDevice::FileTime time) const
Devuelve la hora del archivo especificada por time. Si no se puede determinar la hora devuelve QDateTime() (una fecha-hora inválida).
Véase también setFileTime(), FileTime, y QDateTime::isValid().
bool QFileDevice::flush()
Vuelca los datos almacenados en el buffer al fichero. Devuelve true si se ha realizado correctamente; en caso contrario, devuelve false.
int QFileDevice::handle() const
Devuelve el manejador del fichero.
Se trata de un pequeño número entero positivo, adecuado para su uso con funciones de la biblioteca C como fdopen() y fcntl(). En sistemas que utilizan descriptores de fichero para sockets (es decir, sistemas Unix, pero no Windows) el handle puede utilizarse también con QSocketNotifier.
Si el fichero no está abierto, o hay un error, handle() devuelve -1.
Véase también QSocketNotifier.
[override virtual] bool QFileDevice::isSequential() const
Reimplementa: QIODevice::isSequential() const.
Devuelve true si el archivo sólo puede manipularse secuencialmente; en caso contrario devuelve false.
La mayoría de los ficheros soportan acceso aleatorio, pero algunos ficheros especiales pueden no soportarlo.
Véase también QIODevice::isSequential().
uchar *QFileDevice::map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = NoOptions)
Asigna size bytes del archivo a la memoria comenzando en offset. Un archivo debe estar abierto para que el mapeo tenga éxito, pero no es necesario que el archivo permanezca abierto después de que se haya mapeado la memoria. Cuando se destruye QFile o se abre un nuevo archivo con este objeto, todos los mapas que no se hayan desmapeado se desmapearán automáticamente.
El mapeo tendrá el mismo modo de apertura que el archivo (lectura y/o escritura), excepto cuando se utilice MapPrivateOption, en cuyo caso siempre es posible escribir en la memoria mapeada.
Cualquier opción de mapeo puede pasarse a través de flags.
Devuelve un puntero a la memoria o nullptr en caso de error.
Véase también unmap().
[virtual] QFileDevice::Permissions QFileDevice::permissions() const
Devuelve la combinación completa OR-ed together de QFile::Permission para el archivo.
Véase también setPermissions().
[override virtual] qint64 QFileDevice::pos() const
Reimplementa: QIODevice::pos() const.
[override virtual protected] qint64 QFileDevice::readData(char *data, qint64 len)
Reimplementa: QIODevice::readData(char *data, qint64 maxSize).
[override virtual protected] qint64 QFileDevice::readLineData(char *data, qint64 maxlen)
Reimplementa: QIODevice::readLineData(char *data, qint64 maxSize).
[virtual] bool QFileDevice::resize(qint64 sz)
Establece el tamaño del archivo (en bytes) sz. Devuelve true si la redimensión tiene éxito; false en caso contrario. Si sz es mayor que el tamaño actual del fichero, los nuevos bytes se pondrán a 0; si sz es menor, el fichero simplemente se truncará.
Advertencia: Esta función puede fallar si el fichero no existe.
Véase también size().
[override virtual] bool QFileDevice::seek(qint64 pos)
Reimplementa: QIODevice::seek(qint64 pos).
Para dispositivos de acceso aleatorio, esta función establece la posición actual en pos, devolviendo true en caso de éxito, o false si se ha producido un error. Para dispositivos secuenciales, el comportamiento por defecto es no hacer nada y devolver false.
Búsqueda más allá del final de un archivo: Si la posición está más allá del final de un archivo, entonces seek() no extenderá inmediatamente el archivo. Si se realiza una escritura en esta posición, entonces el fichero se extenderá. El contenido del fichero entre el final de fichero anterior y los datos recién escritos es UNDEFINED y varía entre plataformas y sistemas de ficheros.
bool QFileDevice::setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime)
Establece la hora del archivo especificado por fileTime en newDate, devolviendo true si tiene éxito; en caso contrario devuelve false.
Nota: El fichero debe estar abierto para utilizar esta función.
Véase también fileTime() y FileTime.
[virtual] bool QFileDevice::setPermissions(QFileDevice::Permissions permissions)
Establece los permisos para el archivo al permissions especificado. Devuelve true si tiene éxito, o false si los permisos no pueden ser modificados.
Advertencia: Esta función no manipula ACLs, lo que puede limitar su efectividad.
Véase también permissions().
[override virtual] qint64 QFileDevice::size() const
Reimplementa: QIODevice::size() const.
Devuelve el tamaño del fichero.
Para ficheros vacíos normales en Unix (por ejemplo, los que están en /proc), esta función devuelve 0; el contenido de un fichero de este tipo se genera bajo demanda en respuesta a que llame a read().
bool QFileDevice::unmap(uchar *address)
Desmapa la memoria address.
Devuelve true si la operación tiene éxito; false en caso contrario.
Véase también map().
void QFileDevice::unsetError()
Establece el error del archivo en QFileDevice::NoError.
Véase también error().
[override virtual protected] qint64 QFileDevice::writeData(const char *data, qint64 len)
Reimplementa: QIODevice::writeData(const char *data, qint64 maxSize).
Documentación de macros
Las clases de E/S relacionadas con ficheros (como QFile, QSaveFile, QTemporaryFile) tienen un método open() para abrir el fichero sobre el que actúan. Es importante comprobar el valor de retorno de la llamada a open() antes de proceder con la lectura o escritura de datos en el archivo.
Por esta razón, a partir de Qt 6.8, algunas sobrecargas de open() se han marcado con el atributo [[nodiscard]]. Dado que este cambio puede generar advertencias en las bases de código existentes, el código de usuario puede optar por que se le aplique o no el atributo mediante la definición de determinadas macros:
- Si se define la macro
QT_USE_NODISCARD_FILE_OPEN, las sobrecargas deopen()se marcan como[[nodiscard]]. - Si se define la macro
QT_NO_USE_NODISCARD_FILE_OPEN, las sobrecargas deopen()no se marcan como[[nodiscard]]. - Si no se define ninguna de las dos macros, el valor por defecto hasta Qt 6.9 inclusive es no tener el atributo. A partir de Qt 6.10, el atributo se aplica automáticamente.
- Si ambas macros están definidas, el programa está mal formado.
Estas macros se introdujeron en Qt 6.8.
© 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.