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: |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QFileDevice ist Teil von Input/Output und Networking.
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
(since 6.8) | QT_NO_USE_NODISCARD_FILE_OPEN |
(since 6.8) | QT_USE_NODISCARD_FILE_OPEN |
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.
Konstante | Wert | Beschreibung |
---|---|---|
QFileDevice::NoError | 0 | 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 | Ein schwerwiegender Fehler ist aufgetreten. |
QFileDevice::ResourceError | 4 | Keine Ressourcen vorhanden (z.B. zu viele offene Dateien, zu wenig Speicher usw.) |
QFileDevice::OpenError | 5 | Die Datei konnte nicht geöffnet werden. |
QFileDevice::AbortError | 6 | Der Vorgang wurde abgebrochen. |
QFileDevice::TimeOutError | 7 | Eine Zeitüberschreitung ist aufgetreten. |
QFileDevice::UnspecifiedError | 8 | Ein nicht spezifizierter Fehler ist aufgetreten. |
QFileDevice::RemoveError | 9 | Die Datei konnte nicht entfernt 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 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.
Konstante | Wert | Beschreibung |
---|---|---|
QFileDevice::AutoCloseHandle | 0x0001 | Das 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::DontCloseHandle | 0 | Wenn 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.
Konstante | Wert | Beschreibung |
---|---|---|
QFileDevice::FileAccessTime | 0 | Wann wurde auf die Datei zuletzt zugegriffen (z. B. gelesen oder geschrieben). |
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
Dieses Enum 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, 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.
Konstante | Wert | Beschreibung |
---|---|---|
QFileDevice::ReadOwner | 0x4000 | Die Datei ist für den Eigentümer der Datei lesbar. |
QFileDevice::WriteOwner | 0x2000 | Die Datei ist für den Eigentümer der Datei beschreibbar. |
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 | Die Datei ist für den Benutzer beschreibbar. |
QFileDevice::ExeUser | 0x0100 | Die Datei ist für den Benutzer ausführbar. |
QFileDevice::ReadGroup | 0x0040 | Die Datei kann von der Gruppe gelesen werden. |
QFileDevice::WriteGroup | 0x0020 | Die Datei ist für die Gruppe schreibbar. |
QFileDevice::ExeGroup | 0x0010 | Die Datei ist von der Gruppe ausführbar. |
QFileDevice::ReadOther | 0x0004 | Die Datei kann von anderen gelesen werden. |
QFileDevice::WriteOther | 0x0002 | Die Datei kann von anderen geschrieben werden. |
QFileDevice::ExeOther | 0x0001 | Die 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
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 vonopen()
als[[nodiscard]]
markiert. - Wenn
QT_NO_USE_NODISCARD_FILE_OPEN
definiert ist, werden die Überladungen vonopen()
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.