QSaveFile Class
Die Klasse QSaveFile bietet eine Schnittstelle zum sicheren Schreiben in Dateien. Mehr...
Kopfzeile: | #include <QSaveFile> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Vererbungen: | QFileDevice |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QSaveFile ist Teil von Input/Output und Networking.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Funktionen
QSaveFile(QObject *parent = nullptr) | |
QSaveFile(const QString &name) | |
QSaveFile(const QString &name, QObject *parent) | |
virtual | ~QSaveFile() |
void | cancelWriting() |
bool | commit() |
bool | directWriteFallback() const |
void | setDirectWriteFallback(bool enabled) |
void | setFileName(const QString &name) |
Reimplementierte öffentliche Funktionen
Reimplementierte geschützte Funktionen
virtual qint64 | writeData(const char *data, qint64 len) override |
Detaillierte Beschreibung
QSaveFile ist ein E/A-Gerät zum Schreiben von Text- und Binärdateien, ohne dass vorhandene Daten verloren gehen, wenn der Schreibvorgang fehlschlägt.
Während des Schreibens wird der Inhalt in eine temporäre Datei geschrieben, und wenn kein Fehler auftritt, wird commit() den Inhalt in die endgültige Datei verschieben. Dies stellt sicher, dass keine Daten in der endgültigen Datei verloren gehen, falls ein Fehler beim Schreiben auftritt, und dass keine teilweise geschriebene Datei am endgültigen Speicherort vorhanden ist. Verwenden Sie immer QSaveFile, wenn Sie ganze Dokumente auf der Festplatte speichern.
QSaveFile erkennt automatisch Fehler beim Schreiben, wie z.B. die Situation einer vollen Partition, bei der 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. Daten werden normalerweise mit QDataStream oder QTextStream gelesen und geschrieben, aber Sie können auch direkt write() aufrufen.
Im Gegensatz zu QFile ist der Aufruf von close() nicht erlaubt. commit() ersetzt es. 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, so dass auch ein späterer Aufruf von commit() nicht speichern wird.
Siehe auch QTextStream, QDataStream, QFileInfo, QDir, QFile, und QTemporaryFile.
Dokumentation der Mitgliedsfunktionen
[explicit]
QSaveFile::QSaveFile(QObject *parent = nullptr)
Konstruiert ein neues Dateiobjekt mit der angegebenen parent. Sie müssen setFileName() vor open() aufrufen.
[explicit]
QSaveFile::QSaveFile(const QString &name)
Konstruiert ein neues Dateiobjekt, das die Datei mit der angegebenen name repräsentiert.
[explicit]
QSaveFile::QSaveFile(const QString &name, QObject *parent)
Konstruiert ein neues Dateiobjekt mit dem angegebenen parent, um die Datei mit dem angegebenen name zu repräsentieren.
[virtual noexcept]
QSaveFile::~QSaveFile()
Zerstört das Dateiobjekt und verwirft den gespeicherten Inhalt, sofern nicht commit() aufgerufen wurde.
void QSaveFile::cancelWriting()
Bricht das Schreiben der neuen Datei ab.
Wenn die Anwendung ihre Meinung während des Speicherns ändert, kann sie cancelWriting() aufrufen, was einen Fehlercode setzt, so dass commit() die temporäre Datei verwirft.
Alternativ kann sie auch einfach sicherstellen, dass sie commit() nicht aufruft.
Nach dem Aufruf dieser Methode sind weitere Schreiboperationen möglich, aber keine davon wird irgendeine Wirkung haben, die geschriebene Datei wird verworfen.
Diese Methode hat keine Auswirkung, wenn direktes Write Fallback verwendet wird. Dies ist der Fall, wenn eine bestehende Datei in einem schreibgeschützten Verzeichnis überschrieben wird: Es kann keine temporäre Datei erstellt werden, so dass die bestehende Datei auf jeden Fall überschrieben wird, und cancelWriting() kann daran nichts ändern, der Inhalt der bestehenden Datei geht verloren.
Siehe auch commit().
bool QSaveFile::commit()
Überträgt die Änderungen auf die Festplatte, wenn alle vorherigen Schreibvorgänge erfolgreich waren.
Es ist zwingend erforderlich, dies am Ende des Speichervorgangs aufzurufen, andernfalls wird die Datei verworfen.
Wenn beim Schreiben ein Fehler auftrat, wird die temporäre Datei gelöscht und false
zurückgegeben. Andernfalls wird sie in die endgültige Datei fileName umbenannt und bei Erfolg true
zurückgegeben. Schließlich wird das Gerät geschlossen.
Siehe auch cancelWriting().
bool QSaveFile::directWriteFallback() const
Gibt true
zurück, wenn die Fallback-Lösung zum Speichern von Dateien in schreibgeschützten Verzeichnissen aktiviert ist.
Siehe auch setDirectWriteFallback().
[override virtual]
QString QSaveFile::fileName() const
Reimplements: QFileDevice::fileName() const.
Gibt den Namen zurück, der mit setFileName() oder dem QSaveFile Konstruktor gesetzt wurde.
Siehe auch setFileName().
[override virtual]
bool QSaveFile::open(QIODeviceBase::OpenMode mode)
Reimplements: QIODevice::open(QIODeviceBase::OpenMode-Modus).
Öffnet die Datei mit mode Flags. Gibt bei Erfolg true
zurück, andernfalls false
.
Wichtig: Die Flags für mode müssen QIODeviceBase::WriteOnly enthalten. Andere übliche Flags, die Sie verwenden können, sind Text und Unbuffered. Flags, die derzeit nicht unterstützt werden, sind ReadOnly (und damit ReadWrite), Append, NewOnly und ExistingOnly; sie erzeugen eine Laufzeitwarnung.
Siehe auch setFileName() und QT_USE_NODISCARD_FILE_OPEN.
void QSaveFile::setDirectWriteFallback(bool enabled)
Ermöglicht das Überschreiben der vorhandenen Datei, falls erforderlich.
QSaveFile erstellt eine temporäre Datei im gleichen Verzeichnis wie die endgültige Datei und benennt sie atomar um. Dies ist jedoch nicht möglich, wenn die Verzeichnisberechtigungen das Anlegen neuer Dateien nicht zulassen. Um die Atomarität zu gewährleisten, schlägt open() fehl, wenn die temporäre Datei nicht erstellt werden kann.
Um Benutzern die Bearbeitung von Dateien mit Schreibrechten in einem Verzeichnis mit eingeschränkten Rechten zu ermöglichen, rufen Sie setDirectWriteFallback() auf, wobei enabled auf true gesetzt ist, und die folgenden Aufrufe von open() greifen auf das direkte Öffnen der vorhandenen Datei und das Schreiben in diese zurück, ohne die Verwendung einer temporären Datei. Dies hat keine Atomizitätsgarantie, d.h. ein Absturz der Anwendung oder z.B. ein Stromausfall könnte zu einer teilweise geschriebenen Datei auf der Festplatte führen. Es bedeutet auch, dass cancelWriting() in einem solchen Fall keine Wirkung hat.
Um vom Benutzer bearbeitete Dokumente zu speichern, rufen Sie typischerweise setDirectWriteFallback(true) auf, und um anwendungsinterne Dateien (Konfigurationsdateien, Datendateien, ...) zu speichern, behalten Sie die Standardeinstellung bei, die Atomizität gewährleistet.
Siehe auch directWriteFallback().
void QSaveFile::setFileName(const QString &name)
Legt die name der Datei fest. Der Name kann keinen Pfad, einen relativen Pfad oder einen absoluten Pfad haben.
Siehe auch QFile::setFileName() und fileName().
[override virtual protected]
qint64 QSaveFile::writeData(const char *data, qint64 len)
Reimplements: QFileDevice::writeData(const char *data, qint64 len).
© 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.