En esta página

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:

QFile y QSaveFile

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

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().

ConstanteValorDescripción
QFileDevice::NoError0No se ha producido ningún error.
QFileDevice::ReadError1Se ha producido un error al leer del archivo.
QFileDevice::WriteError2Se ha producido un error al escribir en el archivo.
QFileDevice::FatalError3Se ha producido un error fatal.
QFileDevice::ResourceError4Sin recursos (por ejemplo, demasiados archivos abiertos, sin memoria, etc.)
QFileDevice::OpenError5No se ha podido abrir el fichero.
QFileDevice::AbortError6Se ha interrumpido la operación.
QFileDevice::TimeOutError7Se ha agotado el tiempo de espera.
QFileDevice::UnspecifiedError8Se ha producido un error no especificado.
QFileDevice::RemoveError9No se ha podido eliminar el fichero.
QFileDevice::RenameError10No se ha podido cambiar el nombre del fichero.
QFileDevice::PositionError11No se ha podido cambiar la posición del fichero.
QFileDevice::ResizeError12No se ha podido cambiar el tamaño del fichero.
QFileDevice::PermissionsError13No se ha podido acceder al fichero.
QFileDevice::CopyError14No 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.

ConstanteValorDescripción
QFileDevice::AutoCloseHandle0x0001El 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::DontCloseHandle0Si 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().

ConstanteValorDescripción
QFileDevice::FileAccessTime0Cuando se accedió más recientemente al archivo (por ejemplo, cuando se leyó o escribió en él).
QFileDevice::FileBirthTime1Cuándo se creó el archivo (puede no estar soportado en UNIX).
QFileDevice::FileMetadataChangeTime2Cuándo se modificaron por última vez los metadatos del archivo.
QFileDevice::FileModificationTime3Cuando 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().

ConstanteValorDescripción
QFileDevice::NoOptions0Sin opciones.
QFileDevice::MapPrivateOption0x0001La 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.

ConstanteValorDescripción
QFileDevice::ReadOwner0x4000El propietario del archivo puede leerlo.
QFileDevice::WriteOwner0x2000El propietario del archivo puede escribir en él.
QFileDevice::ExeOwner0x1000El archivo es ejecutable por el propietario del archivo.
QFileDevice::ReadUser0x0400El usuario puede leer el archivo.
QFileDevice::WriteUser0x0200El usuario puede escribir en el archivo.
QFileDevice::ExeUser0x0100El archivo es ejecutable por el usuario.
QFileDevice::ReadGroup0x0040El archivo puede ser leído por el grupo.
QFileDevice::WriteGroup0x0020El fichero puede ser escrito por el grupo.
QFileDevice::ExeGroup0x0010El fichero es ejecutable por el grupo.
QFileDevice::ReadOther0x0004El fichero puede ser leído por otros.
QFileDevice::WriteOther0x0002El fichero puede ser escrito por otros.
QFileDevice::ExeOther0x0001El 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

[since 6.8] QT_USE_NODISCARD_FILE_OPEN

[since 6.8] QT_NO_USE_NODISCARD_FILE_OPEN

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 de open() se marcan como [[nodiscard]].
  • Si se define la macro QT_NO_USE_NODISCARD_FILE_OPEN, las sobrecargas de open() 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.