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: |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QFileDevice ist Teil von „Ein- und Ausgabe“ und „Netzwerk“.
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
(since 6.8) | QT_NO_USE_NODISCARD_FILE_OPEN |
(since 6.8) | QT_USE_NODISCARD_FILE_OPEN |
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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QFileDevice::NoError | 0 | Es ist kein Fehler aufgetreten. |
QFileDevice::ReadError | 1 | Beim Lesen aus der Datei ist ein Fehler aufgetreten. |
QFileDevice::WriteError | 2 | Beim Schreiben in die Datei ist ein Fehler aufgetreten. |
QFileDevice::FatalError | 3 | Es ist ein schwerwiegender Fehler aufgetreten. |
QFileDevice::ResourceError | 4 | Keine Ressourcen mehr verfügbar (z. B. zu viele geöffnete Dateien, nicht genügend Arbeitsspeicher usw.) |
QFileDevice::OpenError | 5 | Die Datei konnte nicht geöffnet werden. |
QFileDevice::AbortError | 6 | Der Vorgang wurde abgebrochen. |
QFileDevice::TimeOutError | 7 | Es ist eine Zeitüberschreitung aufgetreten. |
QFileDevice::UnspecifiedError | 8 | Es ist ein nicht näher bezeichneter Fehler aufgetreten. |
QFileDevice::RemoveError | 9 | Die Datei konnte nicht gelöscht werden. |
QFileDevice::RenameError | 10 | Die Datei konnte nicht umbenannt werden. |
QFileDevice::PositionError | 11 | Die Position in der Datei konnte nicht geändert werden. |
QFileDevice::ResizeError | 12 | Die Größe der Datei konnte nicht geändert werden. |
QFileDevice::PermissionsError | 13 | Auf die Datei konnte nicht zugegriffen werden. |
QFileDevice::CopyError | 14 | Die 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 “.
| Konstante | Wert | Beschreibung |
|---|---|---|
QFileDevice::AutoCloseHandle | 0x0001 | Das 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::DontCloseHandle | 0 | Wird 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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QFileDevice::FileAccessTime | 0 | Zeitpunkt des letzten Zugriffs auf die Datei (z. B. Lesen oder Schreiben). |
QFileDevice::FileBirthTime | 1 | Wann die Datei erstellt wurde (wird unter UNIX möglicherweise nicht unterstützt). |
QFileDevice::FileMetadataChangeTime | 2 | Wann die Metadaten der Datei zuletzt geändert wurden. |
QFileDevice::FileModificationTime | 3 | Wann 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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QFileDevice::NoOptions | 0 | Keine Optionen. |
QFileDevice::MapPrivateOption | 0x0001 | Der 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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QFileDevice::ReadOwner | 0x4000 | Die Datei ist für den Eigentümer der Datei lesbar. |
QFileDevice::WriteOwner | 0x2000 | Der Eigentümer der Datei kann in die Datei schreiben. |
QFileDevice::ExeOwner | 0x1000 | Die Datei ist für den Eigentümer der Datei ausführbar. |
QFileDevice::ReadUser | 0x0400 | Die Datei ist für den Benutzer lesbar. |
QFileDevice::WriteUser | 0x0200 | Der Benutzer kann in die Datei schreiben. |
QFileDevice::ExeUser | 0x0100 | Die Datei ist für den Benutzer ausführbar. |
QFileDevice::ReadGroup | 0x0040 | Die Datei ist für die Gruppe lesbar. |
QFileDevice::WriteGroup | 0x0020 | Die Datei ist für die Gruppe beschreibbar. |
QFileDevice::ExeGroup | 0x0010 | Die Datei ist für die Gruppe ausführbar. |
QFileDevice::ReadOther | 0x0004 | Die Datei ist für andere lesbar. |
QFileDevice::WriteOther | 0x0002 | Die Datei ist für andere beschreibbar. |
QFileDevice::ExeOther | 0x0001 | Die 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: |
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 againHinweis: 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 disabledWenn 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 againDer 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
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.