QSaveFile Class
Die Klasse „QSaveFile“ bietet eine Schnittstelle zum sicheren Schreiben in Dateien. Mehr...
| Header: | #include <QSaveFile> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Erbt von: | QFileDevice |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QSaveFile ist Teil von „Eingabe/Ausgabe und Netzwerk“.
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Öffentliche Funktionen
| QSaveFile(QObject *parent = nullptr) | |
| QSaveFile(const QString &name, QObject *parent = nullptr) | |
(since 6.11) | QSaveFile(const std::filesystem::path &path, QObject *parent = nullptr) |
| virtual | ~QSaveFile() |
| void | cancelWriting() |
| bool | commit() |
| bool | directWriteFallback() const |
(since 6.11) std::filesystem::path | filesystemFileName() const |
| void | setDirectWriteFallback(bool enabled) |
| void | setFileName(const QString &name) |
(since 6.11) void | setFileName(const std::filesystem::path &name) |
Neu implementierte öffentliche Funktionen
| virtual QString | fileName() const override |
| virtual bool | open(QIODeviceBase::OpenMode mode) override |
(since 6.12) virtual QFileDevice::Permissions | permissions() const override |
(since 6.12) virtual bool | setPermissions(QFileDevice::Permissions permissions) override |
Neu implementierte geschützte Funktionen
| virtual qint64 | writeData(const char *data, qint64 len) override |
Ausführliche Beschreibung
QSaveFile ist ein E/A-Gerät zum Schreiben von Text- und Binärdateien, bei dem vorhandene Daten nicht verloren gehen, falls der Schreibvorgang fehlschlägt.
Während des Schreibvorgangs wird der Inhalt in eine temporäre Datei geschrieben, und wenn kein Fehler auftritt, verschiebt commit() ihn in die endgültige Datei. Dadurch wird sichergestellt, dass bei der endgültigen Datei keine Daten verloren gehen, falls während des Schreibvorgangs ein Fehler auftritt, und dass am endgültigen Speicherort niemals eine nur teilweise geschriebene Datei vorhanden ist. Verwenden Sie stets QSaveFile, wenn Sie ganze Dokumente auf die Festplatte speichern.
QSaveFile erkennt automatisch Fehler beim Schreiben, wie z. B. den Fall einer vollen Partition, bei dem ` write()` nicht alle Bytes schreiben kann. Es merkt sich, dass ein Fehler aufgetreten ist, und verwirft die temporäre Datei in ` commit()`.
Ähnlich wie bei ` QFile` wird die Datei mit ` open()` geöffnet. Das Lesen und Schreiben von Daten erfolgt in der Regel über ` QDataStream ` oder ` QTextStream`, Sie können jedoch auch direkt ` write()` aufrufen.
Im Gegensatz zu „ QFile “ ist der Aufruf von „ close()“ nicht zulässig. „ commit()“ ersetzt diesen Aufruf. Wenn „ commit()“ nicht aufgerufen wurde und die QSaveFile-Instanz zerstört wird, wird die temporäre Datei verworfen.
Um das Speichern aufgrund eines Anwendungsfehlers abzubrechen, rufen Sie ` cancelWriting()` auf, damit auch ein späterer Aufruf von ` commit()` keine Speicherung bewirkt.
Siehe auch QTextStream, QDataStream, QFileInfo, QDir, QFile und QTemporaryFile.
Dokumentation zu den Member-Funktionen
[explicit] QSaveFile::QSaveFile(QObject *parent = nullptr)
Erstellt ein neues Datei-Objekt mit der angegebenen „ parent “. Sie müssen „ setFileName()“ vor „ open()“ aufrufen.
[explicit] QSaveFile::QSaveFile(const QString &name, QObject *parent = nullptr)
Erstellt ein neues Dateiobjekt mit dem angegebenen „ parent “, um die Datei mit dem angegebenen „ name “ darzustellen.
[since 6.11] QSaveFile::QSaveFile(const std::filesystem::path &path, QObject *parent = nullptr)
Erstellt ein neues Dateiobjekt mit dem angegebenen „ parent “, um die Datei mit dem angegebenen „ path “ darzustellen.
Diese Funktion wurde in Qt 6.11 eingeführt.
[virtual noexcept] QSaveFile::~QSaveFile()
Löscht das Datei-Objekt und verwirft dabei den gespeicherten Inhalt, es sei denn, ` commit()` wurde aufgerufen.
void QSaveFile::cancelWriting()
Bricht das Schreiben der neuen Datei ab.
Wenn die Anwendung während des Speichervorgangs ihre Meinung ändert, kann sie `cancelWriting()` aufrufen, wodurch ein Fehlercode gesetzt wird, sodass ` commit()` die temporäre Datei verwirft.
Alternativ kann sie einfach darauf achten, ` commit()` nicht aufzurufen.
Weitere Schreibvorgänge sind nach dem Aufruf dieser Methode zwar möglich, haben jedoch keinerlei Auswirkungen; die geschriebene Datei wird verworfen.
Diese Methode hat keine Wirkung, wenn auf direktes Schreiben zurückgegriffen wird. Dies ist der Fall, wenn eine vorhandene Datei in einem schreibgeschützten Verzeichnis überschrieben wird: Da keine temporäre Datei erstellt werden kann, wird die vorhandene Datei in jedem Fall überschrieben, und `cancelWriting()` kann daran nichts ändern – der Inhalt der vorhandenen Datei geht verloren.
Siehe auch ` commit()`.
bool QSaveFile::commit()
Schreibt die Änderungen auf die Festplatte, sofern alle vorherigen Schreibvorgänge erfolgreich waren.
Diese Funktion muss unbedingt am Ende des Speichervorgangs aufgerufen werden, andernfalls wird die Datei verworfen.
Wenn beim Schreiben ein Fehler aufgetreten ist, wird die temporäre Datei gelöscht und „ false “ zurückgegeben. Andernfalls wird sie in den endgültigen Namen „ fileName “ umbenannt und bei Erfolg „ true “ zurückgegeben. Abschließend wird das Gerät geschlossen.
Siehe auch ` cancelWriting()`.
bool QSaveFile::directWriteFallback() const
Gibt „ true “ zurück, wenn die Ausweichlösung zum Speichern von Dateien in schreibgeschützten Verzeichnissen aktiviert ist.
Siehe auch setDirectWriteFallback().
[override virtual] QString QSaveFile::fileName() const
Implementiert: ` QFileDevice::fileName()` const.
Gibt den Namen zurück, der mit ` setFileName()` oder im Konstruktor ` QSaveFile ` festgelegt wurde.
Siehe auch ` setFileName()`.
[since 6.11] std::filesystem::path QSaveFile::filesystemFileName() const
Gibt „ fileName()“ als „ std::filesystem::path “ zurück.
Diese Funktion wurde in Qt 6.11 eingeführt.
[override virtual] bool QSaveFile::open(QIODeviceBase::OpenMode mode)
Implementiert neu: ` QIODevice::open` (Modus `QIODeviceBase::OpenMode`).
Öffnet die Datei unter Verwendung der angegebenen „ mode “-Flags.
Gibt bei Erfolg „ true “ zurück; andernfalls „ false “.
Wichtig: Die Flags für „ mode “ müssen „ QIODeviceBase::WriteOnly “ enthalten. Weitere häufig verwendete Flags sind „ Text “ und „ Unbuffered “. Derzeit nicht unterstützte Flags sind „ ReadOnly “ (und damit „ ReadWrite “), „ Append “, „ NewOnly “ und „ ExistingOnly “; sie lösen eine Laufzeitwarnung aus.
Siehe auch setFileName() und QT_USE_NODISCARD_FILE_OPEN.
[override virtual, since 6.12] QFileDevice::Permissions QSaveFile::permissions() const
Implementiert neu: QFileDevice::permissions() const.
Gibt die Berechtigungen zurück, die der Datei bei erfolgreicher Ausführung von ` commit()` zugewiesen werden sollen.
Diese Funktion wurde in Qt 6.12 eingeführt.
Siehe auch ` setPermissions()`.
void QSaveFile::setDirectWriteFallback(bool enabled)
Ermöglicht es, die vorhandene Datei bei Bedarf zu überschreiben.
QSaveFile Erstellt eine temporäre Datei im selben Verzeichnis wie die endgültige Datei und benennt diese atomar um. Dies ist jedoch nicht möglich, wenn die Verzeichnisberechtigungen das Erstellen neuer Dateien nicht zulassen. Um die Atomizitätsgarantien zu wahren, schlägt „ open()“ fehl, wenn die temporäre Datei nicht erstellt werden kann.
Damit Benutzer Dateien mit Schreibberechtigung in einem Verzeichnis mit eingeschränkten Berechtigungen bearbeiten können, rufen Sie `setDirectWriteFallback()` auf, wobei ` enabled ` auf `true` gesetzt ist; die folgenden Aufrufe von ` open()` greifen dann auf das direkte Öffnen der vorhandenen Datei und das Schreiben in diese zurück, ohne eine temporäre Datei zu verwenden. Dies bietet keine Garantie für Atomarität, d. h., ein Anwendungsabsturz oder beispielsweise ein Stromausfall könnte dazu führen, dass eine Datei nur teilweise auf die Festplatte geschrieben wird. Das bedeutet auch, dass „ cancelWriting()“ in einem solchen Fall keine Wirkung hat.
In der Regel sollten Sie zum Speichern von vom Benutzer bearbeiteten Dokumenten `setDirectWriteFallback(true)` aufrufen und zum Speichern von anwendungsinternen Dateien (Konfigurationsdateien, Datendateien usw.) die Standardeinstellung beibehalten, die die Atomizität gewährleistet.
Siehe auch ` directWriteFallback()`.
void QSaveFile::setFileName(const QString &name)
Legt den „ name “ der Datei fest. Der Name kann ohne Pfad, als relativer Pfad oder als absoluter Pfad angegeben werden.
Siehe auch „ QFile::setFileName()“ und „ fileName()“.
[since 6.11] void QSaveFile::setFileName(const std::filesystem::path &name)
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.11 eingeführt.
[override virtual, since 6.12] bool QSaveFile::setPermissions(QFileDevice::Permissions permissions)
Implementiert: ` QFileDevice::setPermissions` (Berechtigungen von `QFileDevice::Permissions`).
Legt fest, dass bei erfolgreichem Aufruf von ` commit()` die Berechtigungen aus ` permissions ` für die Datei vergeben werden sollen.
Beim Schreiben über ` QSaveFile ` kann die Datei restriktivere Berechtigungen haben.
Diese Funktion wurde in Qt 6.12 eingeführt.
Siehe auch ` permissions()` ().
[override virtual protected] qint64 QSaveFile::writeData(const char *data, qint64 len)
Implementiert: ` QFileDevice::writeData(const char *data, qint64 len)`.
© 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.