Auf dieser Seite

QFileDevice Class

Die Klasse „QFileDevice“ bietet eine Schnittstelle zum Lesen aus und Schreiben in geöffnete Dateien. Mehr...

Header: #include <QFileDevice>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Erbt von: QIODevice
Vererbt an:

QFile und QSaveFile

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Öffentliche Typen

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

Öffentliche Funktionen

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

Neu implementierte öffentliche Funktionen

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

Neu implementierte geschützte Funktionen

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

Makros

Ausführliche Beschreibung

QFileDevice ist die Basisklasse für E/A-Geräte, die Text- und Binärdateien sowie Ressourcen lesen und schreiben können. Während QFile die Hauptfunktionalität bereitstellt, dient QFileDevice als Basisklasse für die gemeinsame Nutzung von Funktionen mit anderen Dateigeräten wie QSaveFile, indem es alle Operationen bereitstellt, die an Dateien durchgeführt werden können, die mit QFile oder QSaveFile geöffnet wurden.

Siehe auch QFile und QSaveFile.

Dokumentation zu Mitgliedstypen

enum QFileDevice::FileError

Diese Enumeration beschreibt die Fehler, die von der Funktion ` error()` zurückgegeben werden können.

KonstanteWertBeschreibung
QFileDevice::NoError0Es ist kein Fehler aufgetreten.
QFileDevice::ReadError1Beim Lesen aus der Datei ist ein Fehler aufgetreten.
QFileDevice::WriteError2Beim Schreiben in die Datei ist ein Fehler aufgetreten.
QFileDevice::FatalError3Es ist ein schwerwiegender Fehler aufgetreten.
QFileDevice::ResourceError4Keine Ressourcen mehr verfügbar (z. B. zu viele geöffnete Dateien, nicht genügend Arbeitsspeicher usw.)
QFileDevice::OpenError5Die Datei konnte nicht geöffnet werden.
QFileDevice::AbortError6Der Vorgang wurde abgebrochen.
QFileDevice::TimeOutError7Es ist eine Zeitüberschreitung aufgetreten.
QFileDevice::UnspecifiedError8Es ist ein nicht näher bezeichneter Fehler aufgetreten.
QFileDevice::RemoveError9Die Datei konnte nicht gelöscht werden.
QFileDevice::RenameError10Die Datei konnte nicht umbenannt werden.
QFileDevice::PositionError11Die Position in der Datei konnte nicht geändert werden.
QFileDevice::ResizeError12Die Größe der Datei konnte nicht geändert werden.
QFileDevice::PermissionsError13Auf die Datei konnte nicht zugegriffen werden.
QFileDevice::CopyError14Die Datei konnte nicht kopiert werden.

enum QFileDevice::FileHandleFlag
flags QFileDevice::FileHandleFlags

Diese Enumeration wird beim Öffnen einer Datei verwendet, um zusätzliche Optionen anzugeben, die nur für Dateien gelten und nicht für einen generischen „ QIODevice “.

KonstanteWertBeschreibung
QFileDevice::AutoCloseHandle0x0001Das an ` open()` übergebene Datei-Handle sollte durch ` close()` geschlossen werden. Standardmäßig führt `close` lediglich einen Flush der Datei durch, und die Anwendung ist für das Schließen des Datei-Handles verantwortlich. Beim Öffnen einer Datei anhand ihres Namens wird dieses Flag ignoriert, da Qt stets Eigentümer des Datei-Handles ist und dieses schließen muss.
QFileDevice::DontCloseHandle0Wird es nicht explizit geschlossen, bleibt der zugrunde liegende Datei-Handle offen, wenn das „ QFile “-Objekt zerstört wird.

Der Typ `FileHandleFlags` ist ein `typedef` für ` QFlags<FileHandleFlag>`. Er speichert eine OR-Kombination von `FileHandleFlag`-Werten.

enum QFileDevice::FileTime

Diese Enumeration wird von den Funktionen „ fileTime()“ und „ setFileTime()“ verwendet.

KonstanteWertBeschreibung
QFileDevice::FileAccessTime0Zeitpunkt des letzten Zugriffs auf die Datei (z. B. Lesen oder Schreiben).
QFileDevice::FileBirthTime1Wann die Datei erstellt wurde (wird unter UNIX möglicherweise nicht unterstützt).
QFileDevice::FileMetadataChangeTime2Wann die Metadaten der Datei zuletzt geändert wurden.
QFileDevice::FileModificationTime3Wann die Datei zuletzt geändert wurde.

Siehe auch setFileTime(), fileTime() und QFileInfo::fileTime().

enum QFileDevice::MemoryMapFlag
flags QFileDevice::MemoryMapFlags

Diese Enumeration beschreibt spezielle Optionen, die von der Funktion ` map()` verwendet werden können.

KonstanteWertBeschreibung
QFileDevice::NoOptions0Keine Optionen.
QFileDevice::MapPrivateOption0x0001Der zugeordnete Speicher ist privat, sodass Änderungen für andere Prozesse nicht sichtbar sind und nicht auf die Festplatte geschrieben werden. Solche Änderungen gehen verloren, sobald die Speicherzuordnung aufgehoben wird. Es ist nicht festgelegt, ob Änderungen an der Datei, die nach dem Erstellen der Zuordnung vorgenommen wurden, über den zugeordneten Speicher sichtbar sind. Dieser Enum-Wert wurde in Qt 5.4 eingeführt.

Der Typ `MemoryMapFlags` ist ein `typedef` für ` QFlags<MemoryMapFlag>`. Er speichert eine OR-Kombination von `MemoryMapFlag`-Werten.

enum QFileDevice::Permission
flags QFileDevice::Permissions

Diese Aufzählung wird von der Funktion `permission()` verwendet, um die Berechtigungen und den Eigentümer einer Datei anzuzeigen. Die Werte können mit dem OR-Operator verknüpft werden, um mehrere Berechtigungs- und Eigentümerwerte zu prüfen.

KonstanteWertBeschreibung
QFileDevice::ReadOwner0x4000Die Datei ist für den Eigentümer der Datei lesbar.
QFileDevice::WriteOwner0x2000Der Eigentümer der Datei kann in die Datei schreiben.
QFileDevice::ExeOwner0x1000Die Datei ist für den Eigentümer der Datei ausführbar.
QFileDevice::ReadUser0x0400Die Datei ist für den Benutzer lesbar.
QFileDevice::WriteUser0x0200Der Benutzer kann in die Datei schreiben.
QFileDevice::ExeUser0x0100Die Datei ist für den Benutzer ausführbar.
QFileDevice::ReadGroup0x0040Die Datei ist für die Gruppe lesbar.
QFileDevice::WriteGroup0x0020Die Datei ist für die Gruppe beschreibbar.
QFileDevice::ExeGroup0x0010Die Datei ist für die Gruppe ausführbar.
QFileDevice::ReadOther0x0004Die Datei ist für andere lesbar.
QFileDevice::WriteOther0x0002Die Datei ist für andere beschreibbar.
QFileDevice::ExeOther0x0001Die Datei ist für andere ausführbar.

Warnung: Aufgrund von Unterschieden bei den von Qt unterstützten Plattformen ist die Semantik von `ReadUser`, `WriteUser` und `ExeUser` plattformabhängig: Unter Unix werden die Rechte des Dateibesitzers zurückgegeben, unter Windows hingegen die Rechte des aktuellen Benutzers. Dieses Verhalten kann sich in einer zukünftigen Qt-Version ändern.

Hinweis: Auf NTFS-Dateisystemen ist die Überprüfung von Eigentumsrechten und Berechtigungen aus Leistungsgründen standardmäßig deaktiviert. Um sie zu aktivieren, fügen Sie die folgende Zeile ein:

extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;

Die Berechtigungsprüfung wird dann durch Erhöhen bzw. Verringern des Werts „ qt_ntfs_permission_lookup “ um 1 ein- bzw. ausgeschaltet.

qt_ntfs_permission_lookup++; // turn checking on
qt_ntfs_permission_lookup--; // turn it off again

Hinweis: Da es sich hierbei um eine nicht-atomare globale Variable handelt, ist es nur sicher, ` qt_ntfs_permission_lookup ` zu erhöhen oder zu verringern, bevor andere Threads als der Hauptthread gestartet wurden oder nachdem alle anderen Threads außer dem Hauptthread beendet wurden.

Hinweis: Ab Qt 6.6 ist die Variable ` qt_ntfs_permission_lookup ` veraltet. Bitte verwenden Sie die folgenden Alternativen.

Die sichere und einfache Methode zur Verwaltung von Berechtigungsprüfungen ist die Verwendung der RAII-Klasse ` 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

Wenn Sie eine feinere Steuerung benötigen, können Sie die Berechtigung stattdessen mit den folgenden Funktionen verwalten:

qAreNtfsPermissionChecksEnabled();   // Status prüfen
qEnableNtfsPermissionChecks();       // turn checking on
qDisableNtfsPermissionChecks();      // turn it off again

Der Typ „Permissions“ ist ein `typedef` für ` QFlags<Permission>`. Er speichert eine ODER-Kombination von `Permission`-Werten.

Dokumentation der Mitgliedsfunktionen

[virtual noexcept] QFileDevice::~QFileDevice()

Löscht das Dateigerät und schließt es gegebenenfalls.

[override virtual] bool QFileDevice::atEnd() const

Implementiert: ` QIODevice::atEnd()` const.

Gibt ` true ` zurück, wenn das Ende der Datei erreicht wurde; andernfalls gibt sie `false` zurück.

Bei normalen leeren Dateien unter Unix (z. B. solchen im Verzeichnis „ /proc “) gibt diese Funktion „ true “ zurück, da das Dateisystem die Größe einer solchen Datei mit 0 angibt. Daher sollten Sie sich beim Lesen von Daten aus einer solchen Datei nicht auf `atEnd()` verlassen, sondern stattdessen ` read()` aufrufen, bis keine Daten mehr gelesen werden können.

[override virtual] void QFileDevice::close()

Implementiert: ` QIODevice::close()`.

Ruft ` QFileDevice::flush()` auf und schließt die Datei. Fehler, die bei `flush` auftreten, werden ignoriert.

Siehe auch QIODevice::close().

QFileDevice::FileError QFileDevice::error() const

Gibt den Fehlerstatus der Datei zurück.

Der Status des E/A-Geräts gibt einen Fehlercode zurück. Wenn beispielsweise „ open()“ den Wert „ false “ zurückgibt oder eine Lese-/Schreiboperation den Wert -1 zurückgibt, kann diese Funktion aufgerufen werden, um den Grund für das Scheitern der Operation zu ermitteln.

Siehe auch ` unsetError()`.

[virtual] QString QFileDevice::fileName() const

Gibt den Namen der Datei zurück. Die Standardimplementierung in „ QFileDevice “ gibt eine leere Zeichenkette zurück.

QDateTime QFileDevice::fileTime(QFileDevice::FileTime time) const

Gibt die durch time angegebene Dateizeit zurück. Kann die Zeit nicht ermittelt werden, wird QDateTime() zurückgegeben (ein ungültiges Datums- und Zeitformat).

Siehe auch ` setFileTime()`, ` FileTime` und ` QDateTime::isValid()`.

bool QFileDevice::flush()

Schreibt alle gepufferten Daten in die Datei. Gibt bei Erfolg „ true “ zurück; andernfalls „ false “.

int QFileDevice::handle() const

Gibt das Dateihandle der Datei zurück.

Dies ist eine kleine positive Ganzzahl, die für die Verwendung mit C-Bibliotheksfunktionen wie fdopen() und fcntl() geeignet ist. Auf Systemen, die Dateideskriptoren für Sockets verwenden (d. h. Unix-Systeme, jedoch nicht Windows), kann das Handle auch mit QSocketNotifier verwendet werden.

Wenn die Datei nicht geöffnet ist oder ein Fehler auftritt, gibt `handle()` -1 zurück.

Siehe auch QSocketNotifier.

[override virtual] bool QFileDevice::isSequential() const

Implementiert: ` QIODevice::isSequential()` const.

Gibt ` true ` zurück, wenn die Datei nur sequenziell bearbeitet werden kann; andernfalls wird ` false` zurückgegeben.

Die meisten Dateien unterstützen den Direktzugriff, einige spezielle Dateien jedoch möglicherweise nicht.

Siehe auch QIODevice::isSequential().

uchar *QFileDevice::map(qint64 offset, qint64 size, QFileDevice::MemoryMapFlags flags = NoOptions)

Ordnet „ size “ Bytes der Datei dem Speicher zu, beginnend bei „ offset “. Damit die Zuordnung erfolgreich ist, muss die Datei geöffnet sein; sie muss jedoch nach der Zuordnung nicht geöffnet bleiben. Wenn das „ QFile “-Objekt zerstört wird oder eine neue Datei mit diesem Objekt geöffnet wird, werden alle Zuordnungen, die noch nicht aufgehoben wurden, automatisch aufgehoben.

Die Zuordnung hat denselben Öffnungsmodus wie die Datei (Lesen und/oder Schreiben), außer bei Verwendung von ` MapPrivateOption`; in diesem Fall ist es immer möglich, in den zugeordneten Speicher zu schreiben.

Alle Zuordnungsoptionen können über ` flags` übergeben werden.

Gibt einen Zeiger auf den Speicher zurück oder „ nullptr “, falls ein Fehler auftritt.

Siehe auch ` unmap()`.

[virtual] QFileDevice::Permissions QFileDevice::permissions() const

Gibt die vollständige, mit „OR“ verknüpfte Kombination von QFile::Permission für die Datei zurück.

Siehe auch ` setPermissions()`.

[override virtual] qint64 QFileDevice::pos() const

Implementiert neu: QIODevice::pos() const.

[override virtual protected] qint64 QFileDevice::readData(char *data, qint64 len)

Implementiert: QIODevice::readData(char *data, qint64 maxSize).

[override virtual protected] qint64 QFileDevice::readLineData(char *data, qint64 maxlen)

Implementiert: QIODevice::readLineData(char *data, qint64 maxSize).

[virtual] bool QFileDevice::resize(qint64 sz)

Legt die Dateigröße (in Byte) sz fest. Gibt „ true “ zurück, wenn die Größenänderung erfolgreich war; andernfalls „false“. Ist sz größer als die aktuelle Dateigröße, wird der Wert von „new bytes“ auf 0 gesetzt; ist sz kleiner, wird die Datei einfach gekürzt.

Warnung: Diese Funktion kann fehlschlagen, wenn die Datei nicht existiert.

Siehe auch ` size()`.

[override virtual] bool QFileDevice::seek(qint64 pos)

Implementiert: ` QIODevice::seek` (qint64 pos).

Bei Geräten mit wahlfreiem Zugriff setzt diese Funktion die aktuelle Position auf ` pos` und gibt bei Erfolg `true` zurück, andernfalls `false`, falls ein Fehler aufgetreten ist. Bei sequenziellen Geräten besteht das Standardverhalten darin, nichts zu tun und `false` zurückzugeben.

Springen über das Dateiende hinaus: Befindet sich die Position jenseits des Dateiendes, verlängert seek() die Datei nicht sofort. Wird an dieser Position ein Schreibvorgang durchgeführt, wird die Datei verlängert. Der Inhalt der Datei zwischen dem bisherigen Dateiende und den neu geschriebenen Daten ist UNDEFINERT und variiert je nach Plattform und Dateisystem.

bool QFileDevice::setFileTime(const QDateTime &newDate, QFileDevice::FileTime fileTime)

Setzt die durch ` fileTime ` angegebene Dateizeit auf ` newDate` und gibt bei Erfolg „true“ zurück; andernfalls wird „false“ zurückgegeben.

Hinweis: Die Datei muss geöffnet sein, um diese Funktion nutzen zu können.

Siehe auch „ fileTime()“ und „ FileTime “.

[virtual] bool QFileDevice::setPermissions(QFileDevice::Permissions permissions)

Legt die Berechtigungen für die Datei auf die angegebene Werteliste „ permissions “ fest. Gibt bei Erfolg „ true “ zurück, andernfalls „ false “, wenn die Berechtigungen nicht geändert werden können.

Warnung: Diese Funktion bearbeitet keine ACLs, was ihre Wirksamkeit einschränken kann.

Siehe auch permissions().

[override virtual] qint64 QFileDevice::size() const

Implementiert: QIODevice::size() const.

Gibt die Größe der Datei zurück.

Bei normalen leeren Dateien unter Unix (z. B. denen in /proc) gibt diese Funktion 0 zurück; der Inhalt einer solchen Datei wird bei Bedarf generiert, wenn Sie read() aufrufen.

bool QFileDevice::unmap(uchar *address)

Hebt die Zuordnung des Speicherbereichs „ address “ auf.

Gibt ` true ` zurück, wenn das Aufheben der Zuordnung erfolgreich war; andernfalls `false`.

Siehe auch map().

void QFileDevice::unsetError()

Setzt den Fehler der Datei auf „ QFileDevice::NoError “.

Siehe auch error().

[override virtual protected] qint64 QFileDevice::writeData(const char *data, qint64 len)

Implementiert: ` QIODevice::writeData` (const char *data, qint64 maxSize).

Makro-Dokumentation

[since 6.8] QT_NO_USE_NODISCARD_FILE_OPEN

[since 6.8] QT_USE_NODISCARD_FILE_OPEN

Dateibezogene E/A-Klassen (wie z. B. QFile, QSaveFile, QTemporaryFile) verfügen über eine Methode „ open() “, um die Datei zu öffnen, auf die sie angewendet werden. Es ist wichtig, den Rückgabewert des Aufrufs von „ open() “ zu überprüfen, bevor mit dem Lesen oder Schreiben von Daten in die Datei fortgefahren wird.

Aus diesem Grund wurden ab Qt 6.8 einige Überladungen von ` open() ` mit dem Attribut ` [[nodiscard]] ` gekennzeichnet. Da diese Änderung in bestehenden Codebasen zu Warnungen führen kann, kann der Benutzer durch die Definition bestimmter Makros festlegen, ob das Attribut angewendet werden soll oder nicht:

  • Ist das Makro ` QT_USE_NODISCARD_FILE_OPEN ` definiert, werden die Überladungen von ` open() ` als ` [[nodiscard]]` gekennzeichnet.
  • Ist das Makro „ QT_NO_USE_NODISCARD_FILE_OPEN “ definiert, werden die Überladungen von „ open() “ nicht als „ [[nodiscard]] “ gekennzeichnet.
  • Ist keines der Makros definiert, gilt bis einschließlich Qt 6.9 standardmäßig, dass das Attribut nicht vorhanden ist. Ab Qt 6.10 wird das Attribut automatisch angewendet.
  • Sind beide Makros definiert, ist das Programm fehlerhaft.

Diese Makros wurden in Qt 6.8 eingeführt.

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