QTemporaryFile Class
Die Klasse `QTemporaryFile` ist ein E/A-Gerät, das mit temporären Dateien arbeitet. Mehr...
| Header: | #include <QTemporaryFile> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Erbt von: | QFile |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QTemporaryFile ist Teil von „Eingabe/Ausgabe und Netzwerk“.
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Öffentliche Funktionen
| QTemporaryFile() | |
| QTemporaryFile(QObject *parent) | |
| QTemporaryFile(const QString &templateName) | |
| QTemporaryFile(const QString &templateName, QObject *parent) | |
(since 6.7) | QTemporaryFile(const std::filesystem::path &templateName, QObject *parent = nullptr) |
| virtual | ~QTemporaryFile() |
| bool | autoRemove() const |
| QString | fileTemplate() const |
| bool | open() |
| bool | rename(const QString &newName) |
(since 6.7) bool | rename(const std::filesystem::path &newName) |
(since 6.11) bool | renameOverwrite(const QString &newName) |
(since 6.11) bool | renameOverwrite(const std::filesystem::path &newName) |
| void | setAutoRemove(bool b) |
| void | setFileTemplate(const QString &templateName) |
(since 6.7) void | setFileTemplate(const std::filesystem::path &name) |
Neu implementierte öffentliche Funktionen
| virtual QString | fileName() const override |
Statische öffentliche Mitglieder
| QTemporaryFile * | createNativeFile(QFile &file) |
| QTemporaryFile * | createNativeFile(const QString &fileName) |
(since 6.7) QTemporaryFile * | createNativeFile(const std::filesystem::path &fileName) |
Neu implementierte geschützte Funktionen
| virtual bool | open(QIODeviceBase::OpenMode mode) override |
Ausführliche Beschreibung
QTemporaryFile dient dazu, auf sichere Weise eindeutige temporäre Dateien zu erstellen. Die Datei selbst wird durch den Aufruf von ` open()` erstellt. Der Name der temporären Datei ist garantiert eindeutig (d. h., es wird garantiert, dass keine bereits vorhandene Datei überschrieben wird), und die Datei wird anschließend bei der Zerstörung des QTemporaryFile-Objekts entfernt. Dies ist eine wichtige Technik, um Datenkorruption bei Anwendungen zu vermeiden, die Daten in temporären Dateien speichern. Der Dateiname wird entweder automatisch generiert oder auf der Grundlage einer Vorlage erstellt, die an den Konstruktor von `QTemporaryFile` übergeben wird.
Beispiel:
// Within a function/method...
QTemporaryFile file;
if (file.open()) {
// file.fileName() returns the unique file name
}
// The QTemporaryFile destructor removes the temporary file
// as it goes out of scope.Das erneute Öffnen eines `QTemporaryFile` nach dem Aufruf von ` close()` ist sicher. Solange das `QTemporaryFile`-Objekt selbst nicht zerstört wird, existiert die eindeutige temporäre Datei und wird intern von `QTemporaryFile` offen gehalten.
Der Dateiname der temporären Datei kann durch Aufruf von ` fileName()` ermittelt werden. Beachten Sie, dass dieser erst nach dem ersten Öffnen der Datei definiert ist; zuvor gibt die Funktion eine leere Zeichenkette zurück.
Eine temporäre Datei besteht aus einem statischen Teil des Namens und einem Teil, der so berechnet wird, dass er eindeutig ist. Der Standarddateiname wird anhand von ` QCoreApplication::applicationName()` (ansonsten ` qt_temp`) ermittelt und in den temporären Pfad geschrieben, der von ` QDir::tempPath()` zurückgegeben wird. Wenn Sie einen eigenen Dateinamen angeben, wird ein relativer Dateipfad standardmäßig nicht im temporären Verzeichnis abgelegt, sondern bezieht sich auf das aktuelle Arbeitsverzeichnis.
Es ist wichtig, das richtige Verzeichnis anzugeben, wenn die Funktion rename() aufgerufen wird, da QTemporaryFile Dateien nur innerhalb desselben Volumes bzw. Dateisystems umbenennen kann, auf dem die temporäre Datei selbst erstellt wurde.
Der Dateiname (der Teil nach dem letzten Verzeichnispfadtrennzeichen in der angegebenen Dateivorlage) kann die spezielle Zeichenfolge „ "XXXXXX" “ (mindestens sechs Großbuchstaben "X" ) enthalten, die durch den automatisch generierten Teil des Dateinamens ersetzt wird. Enthält der Dateiname „ "XXXXXX" “ nicht, hängt QTemporaryFile den generierten Teil an den Dateinamen an. Es wird nur das letzte Vorkommen von „ "XXXXXX" “ berücksichtigt.
Hinweis: Unter Linux versucht `QTemporaryFile`, unbenannte temporäre Dateien zu erstellen. Gelingt dies, gibt ` open()` den Wert „true“ zurück, während ` exists()` den Wert „false“ zurückgibt. Wenn Sie ` fileName()` oder eine Funktion aufrufen, die diese aufruft, vergibt `QTemporaryFile` einen Namen für die Datei, sodass die meisten Anwendungen keinen Unterschied feststellen werden.
Siehe auch QDir::tempPath() und QFile.
Dokumentation zu den Mitgliedsfunktionen
QTemporaryFile::QTemporaryFile()
Erstellt eine `QTemporaryFile`-Instanz.
Die Standardvorlage für den Dateinamen wird aus dem Anwendungsnamen ermittelt, wie er von ` QCoreApplication::applicationName()` zurückgegeben wird (oder von ` "qt_temp" `, falls der Anwendungsname leer ist), gefolgt von ` ".XXXXXX"`. Die Datei wird im temporären Verzeichnis des Systems gespeichert, wie es von ` QDir::tempPath()` zurückgegeben wird.
Siehe auch setFileTemplate(), fileTemplate(), fileName() und QDir::tempPath().
[explicit] QTemporaryFile::QTemporaryFile(QObject *parent)
Erstellt eine `QTemporaryFile`-Instanz mit dem angegebenen ` parent`.
Die Standardvorlage für den Dateinamen wird aus dem Anwendungsnamen ermittelt, wie er von ` QCoreApplication::applicationName()` zurückgegeben wird (oder von ` "qt_temp" `, falls der Anwendungsname leer ist), gefolgt von ` ".XXXXXX"`. Die Datei wird im temporären Verzeichnis des Systems gespeichert, wie es von ` QDir::tempPath()` zurückgegeben wird.
Siehe auch setFileTemplate().
[explicit] QTemporaryFile::QTemporaryFile(const QString &templateName)
Erstellt eine `QTemporaryFile`-Instanz mit der Dateinamenvorlage „ templateName “.
Beim Öffnen der temporären Datei wird „ templateName “ verwendet, um einen eindeutigen Dateinamen zu erstellen.
Wenn der Dateiname (der Teil nach dem letzten Verzeichnispfadtrennzeichen in ` templateName`) nicht ` "XXXXXX"` enthält, wird dieser automatisch hinzugefügt.
"XXXXXX" wird durch den dynamischen Teil des Dateinamens ersetzt, der so berechnet wird, dass er eindeutig ist.
Ist templateName ein relativer Pfad, bezieht sich der Pfad auf das aktuelle Arbeitsverzeichnis. Mit QDir::tempPath() können Sie templateName erstellen, wenn Sie das temporäre Verzeichnis des Systems verwenden möchten.
Es ist wichtig, das richtige Verzeichnis anzugeben, wenn die Funktion ` rename()` aufgerufen wird, da `QTemporaryFile` Dateien nur innerhalb desselben Volumes bzw. Dateisystems umbenennen kann, auf dem die temporäre Datei selbst erstellt wurde.
Siehe auch open() und fileTemplate().
QTemporaryFile::QTemporaryFile(const QString &templateName, QObject *parent)
Erstellt eine `QTemporaryFile`-Instanz mit dem angegebenen ` parent` und ` templateName ` als Dateinamenvorlage.
Beim Öffnen der temporären Datei wird „ templateName “ verwendet, um einen eindeutigen Dateinamen zu erstellen.
Wenn der Dateiname (der Teil nach dem letzten Verzeichnispfadtrennzeichen in ` templateName`) ` "XXXXXX"` nicht enthält, wird dieser automatisch hinzugefügt.
"XXXXXX" wird durch den dynamischen Teil des Dateinamens ersetzt, der so berechnet wird, dass er eindeutig ist.
Ist templateName ein relativer Pfad, bezieht sich der Pfad auf das aktuelle Arbeitsverzeichnis. Sie können QDir::tempPath() verwenden, um templateName zu erstellen, wenn Sie das temporäre Verzeichnis des Systems nutzen möchten. Es ist wichtig, das richtige Verzeichnis anzugeben, falls die Funktion rename() aufgerufen wird, da QTemporaryFile Dateien nur innerhalb desselben Volumes bzw. Dateisystems umbenennen kann, auf dem die temporäre Datei selbst erstellt wurde.
Siehe auch „ open “ () und „ fileTemplate “ ().
[explicit, since 6.7] QTemporaryFile::QTemporaryFile(const std::filesystem::path &templateName, QObject *parent = nullptr)
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.7 eingeführt.
[virtual noexcept] QTemporaryFile::~QTemporaryFile()
Löscht das temporäre Datei-Objekt; die Datei wird bei Bedarf automatisch geschlossen und im Modus „Automatisches Entfernen“ automatisch gelöscht.
Siehe auch autoRemove().
bool QTemporaryFile::autoRemove() const
Gibt ` true ` zurück, wenn sich das ` QTemporaryFile ` im Modus „Auto-Remove“ befindet. Im Modus „Auto-Remove“ wird der Dateiname bei der Löschung automatisch von der Festplatte entfernt. Dadurch ist es sehr einfach, ein ` QTemporaryFile `-Objekt auf dem Stack zu erstellen, es mit Daten zu füllen, daraus zu lesen und schließlich bei der Rückkehr aus der Funktion sorgt es automatisch für die Bereinigung.
Der Auto-Remove-Modus ist standardmäßig aktiviert.
Siehe auch „ setAutoRemove()“ und „ remove()“.
[static] QTemporaryFile *QTemporaryFile::createNativeFile(QFile &file)
Wenn „ file “ noch keine native Datei ist, wird in „ QDir::tempPath()“ eine „ QTemporaryFile “ erstellt, der Inhalt von „ file “ wird in diese kopiert und ein Zeiger auf die temporäre Datei zurückgegeben. Führt keine Aktion aus und gibt „ 0 “ zurück, wenn „ file “ bereits eine native Datei ist.
Beispiel:
QFile f_pointer(":/resources/file.txt");
QTemporaryFile::createNativeFile(f_pointer); // Returns a pointer to a temporary file
QFile f0("/users/qt/file.txt");
QTemporaryFile::createNativeFile(f0); // Returns 0Siehe auch QFileInfo::isNativePath().
[static] QTemporaryFile *QTemporaryFile::createNativeFile(const QString &fileName)
Arbeitet mit dem angegebenen fileName statt mit einem bestehenden QFile -Objekt.
Dies ist eine überladene Funktion.
[static, since 6.7] QTemporaryFile *QTemporaryFile::createNativeFile(const std::filesystem::path &fileName)
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.7 eingeführt.
[override virtual] QString QTemporaryFile::fileName() const
Implementiert: ` QFile::fileName()` const.
Gibt den vollständigen, eindeutigen Dateinamen zurück, der dem ` QTemporaryFile `-Objekt zugrunde liegt. Diese Zeichenkette ist null, bevor die ` QTemporaryFile ` geöffnet wird; danach enthält sie den von ` fileTemplate()` zurückgegebenen Wert sowie zusätzliche Zeichen, um die Eindeutigkeit zu gewährleisten.
Der von dieser Methode zurückgegebene Dateiname ist relativ oder absolut, je nachdem, ob die zur Erstellung dieses Objekts verwendete (oder an ` setFileTemplate()` übergebene) Dateinamenvorlage relativ bzw. absolut ist.
Siehe auch fileTemplate().
QString QTemporaryFile::fileTemplate() const
Gibt die Dateinamenvorlage zurück.
Die von dieser Methode zurückgegebene Dateinamenvorlage ist relativ oder absolut, je nachdem, ob die zur Erstellung dieses Objekts verwendete (oder an ` setFileTemplate()` übergebene) Dateinamenvorlage relativ bzw. absolut ist.
Siehe auch setFileTemplate(), fileName() und Default File Name Template.
bool QTemporaryFile::open()
Öffnet eine eindeutige temporäre Datei im Dateisystem im Modus „ QIODeviceBase::ReadWrite “. Gibt ` true ` zurück, wenn die Datei erfolgreich geöffnet wurde oder bereits geöffnet war. Andernfalls wird ` false` zurückgegeben.
Wird open() zum ersten Mal aufgerufen, erstellt die Funktion einen eindeutigen Dateinamen auf der Grundlage von ` fileTemplate()`. Es wird garantiert, dass die Datei von dieser Funktion erstellt wurde (das heißt, sie hat zuvor noch nie existiert).
Wird eine Datei nach dem Aufruf von ` close()` erneut geöffnet, wird dieselbe Datei wieder geöffnet.
Siehe auch ` setFileTemplate()` und ` QT_USE_NODISCARD_FILE_OPEN`.
[override virtual protected] bool QTemporaryFile::open(QIODeviceBase::OpenMode mode)
Implementiert: QFile::open(QIODeviceBase::OpenMode-Modus).
Öffnet eine eindeutige temporäre Datei im Dateisystem mit den in ` mode ` angegebenen Flags. Gibt ` true ` zurück, wenn die Datei erfolgreich geöffnet wurde oder bereits geöffnet war. Andernfalls wird ` false` zurückgegeben.
Wird open() zum ersten Mal aufgerufen, erstellt die Funktion einen eindeutigen Dateinamen basierend auf fileTemplate() und öffnet die Datei mit den Flags mode. Es ist garantiert, dass die Datei von dieser Funktion erstellt wurde (d. h., sie hat zuvor noch nie existiert).
Wird eine Datei nach dem Aufruf von ` close()` erneut geöffnet, wird dieselbe Datei erneut mit den Flags ` mode ` geöffnet.
Siehe auch ` setFileTemplate()` und ` QT_USE_NODISCARD_FILE_OPEN`.
bool QTemporaryFile::rename(const QString &newName)
Benennt die aktuelle temporäre Datei in „ newName “ um und gibt „true“ zurück, wenn der Vorgang erfolgreich war.
Diese Funktion weist einen wichtigen Unterschied zu „ QFile::rename()“ auf: Sie führt keine Kopier- und Löschoperation durch, wenn der Low-Level-Systemaufruf zum Umbenennen der Datei fehlschlägt – was passieren könnte, wenn „ newName “ eine Datei auf einem anderen Volume oder Dateisystem angibt als dem, auf dem die temporäre Datei erstellt wurde. Mit anderen Worten: „ QTemporaryFile “ unterstützt nur die atomare Umbenennung von Dateien.
Diese Funktionalität dient dazu, die Zieldatei mit bereits vorhandenem Inhalt zu erstellen, sodass ein anderer Prozess keine unvollständige Datei sehen kann, die gerade geschrieben wird. Die Klasse „ QSaveFile “ kann ebenfalls für einen ähnlichen Zweck verwendet werden, insbesondere wenn die Zieldatei keine temporäre Datei ist.
Hinweis: Der Aufruf von `rename()` deaktiviert ` autoRemove` nicht. Wenn die umbenannte Datei dauerhaft erhalten bleiben soll, müssen Sie nach dem Aufruf von `rename()` ` setAutoRemove ` aufrufen und den Wert auf ` false ` setzen. Andernfalls wird die Datei gelöscht, wenn das ` QTemporaryFile `-Objekt zerstört wird.
Diese Funktion schlägt fehl, wenn „ newName “ bereits existiert. Um die Datei zu ersetzen, verwenden Sie stattdessen „ renameOverwrite()“.
Siehe auch „ renameOverwrite()“, „ QSaveFile “, „ QSaveFile::commit()“ und „ QFile::rename()“.
[since 6.7] bool QTemporaryFile::rename(const std::filesystem::path &newName)
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.7 eingeführt.
[since 6.11] bool QTemporaryFile::renameOverwrite(const QString &newName)
Dies entspricht der Funktion „ rename()“, mit dem Unterschied, dass die Datei „ newName “ atomar ersetzt wird, falls sie bereits existiert – genau wie es auch die Funktion „ QSaveFile::commit()“ tut.
Gibt „ false “ zurück, wenn die Umbenennung nicht atomar durchgeführt werden konnte (beispielsweise, wenn sich die temporäre Datei und der Zieldateiname auf unterschiedlichen Dateisystemen / Volumes / Laufwerken befinden).
Diese Funktion wurde in Qt 6.11 eingeführt.
Siehe auch rename(), QSaveFile, QSaveFile::commit() und QFile::rename().
[since 6.11] bool QTemporaryFile::renameOverwrite(const std::filesystem::path &newName)
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.11 eingeführt.
void QTemporaryFile::setAutoRemove(bool b)
Versetzt „ QTemporaryFile “ in den Modus „Auto-Remove“, wenn „ b “ auf „ true “ gesetzt ist.
Die automatische Entfernung ist standardmäßig aktiviert.
Wenn Sie diese Eigenschaft auf „ false “ setzen, stellen Sie sicher, dass die Anwendung eine Möglichkeit bietet, die Datei zu entfernen, sobald sie nicht mehr benötigt wird, einschließlich der Weitergabe der Verantwortung an einen anderen Prozess. Verwenden Sie immer die Funktion „ fileName()“, um den Namen abzurufen, und versuchen Sie niemals, den von „ QTemporaryFile “ generierten Namen zu erraten.
Auf einigen Systemen kann die temporäre Datei unabhängig vom Status dieser Eigenschaft entfernt werden, wenn fileName() vor dem Schließen der Datei nicht aufgerufen wird. Auf dieses Verhalten sollte man sich nicht verlassen; daher sollte der Anwendungscode entweder fileName() aufrufen oder die automatische Entfernungsfunktion aktiviert lassen.
Siehe auch ` autoRemove()` und ` remove()`.
void QTemporaryFile::setFileTemplate(const QString &templateName)
Legt die Dateinamenvorlage auf „ templateName “ fest.
Wenn der Dateiname (der Teil nach dem letzten Verzeichnistrennzeichen in templateName) nicht "XXXXXX" enthält, wird dieser automatisch hinzugefügt.
"XXXXXX" wird durch den dynamischen Teil des Dateinamens ersetzt, der so berechnet wird, dass er eindeutig ist.
Wenn „ templateName “ ein relativer Pfad ist, bezieht sich der Pfad auf das aktuelle Arbeitsverzeichnis. Sie können „ QDir::tempPath()“ verwenden, um „ templateName “ zu erstellen, wenn Sie das temporäre Verzeichnis des Systems nutzen möchten. Es ist wichtig, das richtige Verzeichnis anzugeben, wenn die Funktion „ rename()“ aufgerufen wird, da „ QTemporaryFile “ Dateien nur innerhalb desselben Volumes bzw. Dateisystems umbenennen kann, auf dem die temporäre Datei selbst erstellt wurde.
Siehe auch „ fileTemplate()“ und „ fileName()“.
[since 6.7] void QTemporaryFile::setFileTemplate(const std::filesystem::path &name)
Dies ist eine überladene Funktion.
Diese Funktion wurde in Qt 6.7 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.