QFileDevice Class

Die Klasse QFileDevice bietet eine Schnittstelle zum Lesen von und Schreiben in geöffneten Dateien. Mehr...

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

QFile und QSaveFile

Hinweis: Alle Funktionen in 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()

Reimplementierte ö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

Reimplementierte 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

Detaillierte Beschreibung

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

Siehe auch QFile und QSaveFile.

Dokumentation der Mitgliedstypen

enum QFileDevice::FileError

Diese Aufzählung beschreibt die Fehler, die von der Funktion error() zurückgegeben werden können.

KonstanteWertBeschreibung
QFileDevice::NoError0Kein Fehler aufgetreten.
QFileDevice::ReadError1Beim Lesen aus der Datei ist ein Fehler aufgetreten.
QFileDevice::WriteError2Beim Schreiben in die Datei ist ein Fehler aufgetreten.
QFileDevice::FatalError3Ein schwerwiegender Fehler ist aufgetreten.
QFileDevice::ResourceError4Keine Ressourcen vorhanden (z.B. zu viele offene Dateien, zu wenig Speicher usw.)
QFileDevice::OpenError5Die Datei konnte nicht geöffnet werden.
QFileDevice::AbortError6Der Vorgang wurde abgebrochen.
QFileDevice::TimeOutError7Eine Zeitüberschreitung ist aufgetreten.
QFileDevice::UnspecifiedError8Ein nicht spezifizierter Fehler ist aufgetreten.
QFileDevice::RemoveError9Die Datei konnte nicht entfernt 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 Aufzählung wird beim Öffnen einer Datei verwendet, um zusätzliche Optionen festzulegen, die nur für Dateien und nicht für ein generisches QIODevice gelten.

KonstanteWertBeschreibung
QFileDevice::AutoCloseHandle0x0001Das an open() übergebene Dateihandle sollte durch close() geschlossen werden. Das Standardverhalten ist, dass close die Datei einfach flushed und die Anwendung für das Schließen des Dateihandles verantwortlich ist. Beim Öffnen einer Datei über den Namen wird dieses Flag ignoriert, da Qt immer Eigentümer des Dateihandles ist und es schließen muss.
QFileDevice::DontCloseHandle0Wenn es nicht explizit geschlossen wird, bleibt das zugrundeliegende Dateihandle 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 Aufzählung wird von den Funktionen fileTime() und setFileTime() verwendet.

KonstanteWertBeschreibung
QFileDevice::FileAccessTime0Wann wurde auf die Datei zuletzt zugegriffen (z. B. gelesen oder geschrieben).
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

Dieses Enum beschreibt spezielle Optionen, die von der Funktion map() verwendet werden können.

KonstanteWertBeschreibung
QFileDevice::NoOptions0Keine Optionen.
QFileDevice::MapPrivateOption0x0001Der zugeordnete Speicher ist privat, d.h. alle Änderungen sind für andere Prozesse nicht sichtbar und werden nicht auf die Festplatte geschrieben. Solche Änderungen gehen verloren, wenn die Zuordnung des Speichers aufgehoben wird. Es ist nicht spezifiziert, ob Änderungen an der Datei, die nach der Erstellung des Mappings vorgenommen werden, durch den gemappten Speicher sichtbar werden. 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 permission()-Funktion verwendet, um die Berechtigungen und den Besitz einer Datei zu melden. Die Werte können miteinander ODER-verknüpft werden, um mehrere Berechtigungs- und Besitzwerte zu testen.

KonstanteWertBeschreibung
QFileDevice::ReadOwner0x4000Die Datei ist für den Eigentümer der Datei lesbar.
QFileDevice::WriteOwner0x2000Die Datei ist für den Eigentümer der Datei beschreibbar.
QFileDevice::ExeOwner0x1000Die Datei ist für den Eigentümer der Datei ausführbar.
QFileDevice::ReadUser0x0400Die Datei ist für den Benutzer lesbar.
QFileDevice::WriteUser0x0200Die Datei ist für den Benutzer beschreibbar.
QFileDevice::ExeUser0x0100Die Datei ist für den Benutzer ausführbar.
QFileDevice::ReadGroup0x0040Die Datei kann von der Gruppe gelesen werden.
QFileDevice::WriteGroup0x0020Die Datei ist für die Gruppe schreibbar.
QFileDevice::ExeGroup0x0010Die Datei ist von der Gruppe ausführbar.
QFileDevice::ReadOther0x0004Die Datei kann von anderen gelesen werden.
QFileDevice::WriteOther0x0002Die Datei kann von anderen geschrieben werden.
QFileDevice::ExeOther0x0001Die Datei ist für andere ausführbar.

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

Hinweis: Auf NTFS-Dateisystemen ist die Überprüfung von Besitz und Rechten 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 ein- und ausgeschaltet, indem qt_ntfs_permission_lookup um 1 erhöht oder erniedrigt wird.

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

Hinweis: Da es sich um eine nicht-atomare globale Variable handelt, ist es nur dann sicher, qt_ntfs_permission_lookup zu inkrementieren oder zu dekrementieren, wenn andere Threads als der Haupt-Thread gestartet wurden oder nachdem jeder andere Thread als der Haupt-Thread beendet wurde.

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

Der sichere und einfache Weg 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 Kontrolle benötigen, ist es möglich, die Berechtigung stattdessen mit den folgenden Funktionen zu verwalten:

qAreNtfsPermissionChecksEnabled(); // Status prüfenqEnableNtfsPermissionChecks();       // 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()

Zerstört das Dateigerät und schließt es, falls erforderlich.

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

Reimplements: QIODevice::atEnd() const.

Gibt true zurück, wenn das Ende der Datei erreicht wurde; andernfalls wird false zurückgegeben.

Für normale leere Dateien unter Unix (z. B. solche in /proc) gibt diese Funktion true zurück, da das Dateisystem meldet, dass die Größe einer solchen Datei 0 ist. Daher sollten Sie sich beim Lesen von Daten aus einer solchen Datei nicht auf atEnd() verlassen, sondern read() aufrufen, bis keine Daten mehr gelesen werden können.

[override virtual] void QFileDevice::close()

Reimplements: QIODevice::close().

Ruft QFileDevice::flush() auf und schließt die Datei. Fehler von flush werden ignoriert.

Siehe auch QIODevice::close().

QFileDevice::FileError QFileDevice::error() const

Gibt den Dateifehlerstatus zurück.

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

Siehe auch unsetError().

[virtual] QString QFileDevice::fileName() const

Gibt den Namen der Datei zurück. Die Standardimplementierung in QFileDevice gibt einen Null-String zurück.

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

Gibt die durch time angegebene Datei-Zeit zurück. Wenn die Zeit nicht ermittelt werden kann, wird QDateTime() zurückgegeben (eine ungültige Datumszeit).

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

bool QFileDevice::flush()

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

Dabei handelt es sich um 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, aber 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

Reimplements: QIODevice::isSequential() const.

Gibt true zurück, wenn die Datei nur sequentiell bearbeitet werden kann; andernfalls false.

Die meisten Dateien unterstützen den Zufallszugriff, aber einige spezielle Dateien möglicherweise nicht.

Siehe auch QIODevice::isSequential().

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

Bildet size Bytes der Datei in den Speicher ab, beginnend mit offset. Eine Datei muss geöffnet sein, damit eine Zuordnung gelingen kann, aber die Datei muss nicht geöffnet bleiben, nachdem der Speicher zugeordnet wurde. Wenn QFile zerstört oder eine neue Datei mit diesem Objekt geöffnet wird, werden alle noch nicht zugeordneten Maps automatisch freigegeben.

Das Mapping hat den gleichen offenen Modus wie die Datei (Lesen und/oder Schreiben), außer bei Verwendung von MapPrivateOption, in diesem Fall ist es immer möglich, in den gemappten Speicher zu schreiben.

Alle Mapping-Optionen können über flags übergeben werden.

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

Siehe auch unmap().

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

Gibt die vollständige ODER-verknüpfte Kombination von QFile::Permission für die Datei zurück.

Siehe auch setPermissions().

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

Reimplements: QIODevice::pos() const.

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

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

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

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

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

Setzt die Dateigröße (in Bytes) sz. Gibt true zurück, wenn die Größenänderung erfolgreich war; andernfalls false. Wenn sz größer ist als die Datei, werden die neuen Bytes auf 0 gesetzt; wenn sz kleiner ist, wird die Datei einfach abgeschnitten.

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

Siehe auch size().

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

Reimplements: 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 oder false, wenn ein Fehler aufgetreten ist. Für sequentielle Geräte ist das Standardverhalten, nichts zu tun und false zurückzugeben.

Suche nach dem Ende einer Datei: Wenn die Position hinter dem Ende einer Datei liegt, wird seek() die Datei nicht sofort erweitern. Wenn an dieser Position ein Schreibvorgang durchgeführt wird, wird die Datei erweitert. Der Inhalt der Datei zwischen dem vorherigen Dateiende und den neu geschriebenen Daten ist UNDefiniert 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 false.

Hinweis: Die Datei muss geöffnet sein, um diese Funktion zu verwenden.

Siehe auch fileTime() und FileTime.

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

Setzt die Berechtigungen für die Datei auf die angegebene permissions. Gibt bei Erfolg true zurück, oder false, wenn die Berechtigungen nicht geändert werden können.

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

Siehe auch permissions().

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

Reimplements: QIODevice::size() const.

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

Für normale leere Dateien unter Unix (z. B. die in /proc) gibt diese Funktion 0 zurück; der Inhalt einer solchen Datei wird bei Bedarf als Reaktion auf den Aufruf von read() erzeugt.

bool QFileDevice::unmap(uchar *address)

Hebt die Zuordnung des Speichers address auf.

Gibt true zurück, wenn das Unmap 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)

Reimplements: 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 (z. B. QFile, QSaveFile, QTemporaryFile) verfügen über eine Methode open() zum Öffnen der Datei, auf die sie wirken. 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, beginnend mit Qt 6.8, einige Überladungen von open() mit dem [[nodiscard]] Attribut gekennzeichnet. Da diese Änderung in bestehenden Codebasen zu Warnungen führen kann, kann der Anwendercode die Anwendung des Attributs durch die Definition bestimmter Makros an- oder abwählen:

  • Wenn das Makro QT_USE_NODISCARD_FILE_OPEN definiert ist, werden Überladungen von open() als [[nodiscard]] markiert.
  • Wenn QT_NO_USE_NODISCARD_FILE_OPEN definiert ist, werden die Überladungen von open() nicht als [[nodiscard]] markiert.
  • Wenn keines der beiden Makros definiert ist, dann ist der Standard bis einschließlich Qt 6.9, dass das Attribut nicht vorhanden ist. Ab Qt 6.10 wird das Attribut automatisch angewendet.
  • Wenn beide Makros definiert sind, ist das Programm schlecht geformt.

Diese Funktion wurde in Qt 6.8 eingeführt.

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