QTemporaryFile Class

Die Klasse QTemporaryFile ist ein E/A-Gerät, das mit temporären Dateien arbeitet. Mehr...

Kopfzeile: #include <QTemporaryFile>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Vererbt: QFile

Hinweis: Alle Funktionen in 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)
void setAutoRemove(bool b)
void setFileTemplate(const QString &templateName)
(since 6.7) void setFileTemplate(const std::filesystem::path &name)

Reimplementierte ö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)

Reimplementierte geschützte Funktionen

virtual bool open(QIODeviceBase::OpenMode mode) override

Detaillierte Beschreibung

QTemporaryFile wird verwendet, um eindeutige temporäre Dateien sicher zu erstellen. Die Datei selbst wird durch den Aufruf von open() erstellt. Der Name der temporären Datei ist garantiert eindeutig (d.h. Sie überschreiben garantiert keine bestehende Datei), und die Datei wird anschließend bei der Zerstörung des QTemporaryFile-Objekts entfernt. Dies ist eine wichtige Technik, die Datenverfälschungen bei Anwendungen, die Daten in temporären Dateien speichern, vermeidet. Der Dateiname wird entweder automatisch generiert oder basierend auf einer Vorlage erstellt, die dem 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 einer QTemporaryFile nach dem Aufruf von close() ist sicher. Solange das QTemporaryFile-Objekt selbst nicht zerstört wird, existiert die einzigartige temporäre Datei und wird intern von QTemporaryFile offen gehalten.

Der Dateiname der temporären Datei kann durch den Aufruf von fileName() ermittelt werden. Beachten Sie, dass dieser nur definiert wird, nachdem die Datei zum ersten Mal geöffnet wurde; davor gibt die Funktion einen leeren String zurück.

Eine temporäre Datei hat einen statischen Teil des Namens und einen Teil, der so berechnet wird, dass er eindeutig ist. Der Standard-Dateiname wird aus QCoreApplication::applicationName() ermittelt (andernfalls qt_temp) und in den temporären Pfad eingefügt, der von QDir::tempPath() zurückgegeben wird. Wenn Sie einen eigenen Dateinamen angeben, wird nicht standardmäßig ein relativer Dateipfad in das temporäre Verzeichnis gesetzt, sondern ein relativer zum aktuellen Arbeitsverzeichnis.

Es ist wichtig, das richtige Verzeichnis anzugeben, wenn die Funktion rename() aufgerufen wird, da QTemporaryFile nur Dateien innerhalb desselben Volumes / Dateisystems umbenennen kann, auf dem die temporäre Datei selbst erstellt wurde.

Der Dateiname (der Teil nach dem letzten Verzeichnispfad-Trennzeichen in der angegebenen Dateivorlage) kann die spezielle Sequenz "XXXXXX" (mindestens sechs Großbuchstaben "X" ) enthalten, die dann durch den automatisch generierten Teil des Dateinamens ersetzt wird. Wenn der Dateiname "XXXXXX" nicht enthält, fügt QTemporaryFile den generierten Teil an den Dateinamen an. Nur das letzte Vorkommen von "XXXXXX" wird berücksichtigt.

Hinweis: Unter Linux wird QTemporaryFile versuchen, unbenannte temporäre Dateien zu erstellen. Wenn dies gelingt, wird open() true zurückgeben, aber exists() wird false sein. Wenn Sie fileName() oder eine andere Funktion, die diese Funktion aufruft, aufrufen, wird QTemporaryFile der Datei einen Namen geben, so dass die meisten Anwendungen keinen Unterschied bemerken werden.

Siehe auch QDir::tempPath() und QFile.

Dokumentation der Mitgliedsfunktionen

QTemporaryFile::QTemporaryFile()

Konstruiert eine QTemporaryFile.

Die Standardvorlage für den Dateinamen ergibt sich aus dem Anwendungsnamen, wie er von QCoreApplication::applicationName() zurückgegeben wird (oder "qt_temp", wenn der Anwendungsname leer ist), gefolgt von ".XXXXXX". Die Datei wird im temporären Verzeichnis des Systems gespeichert, das von QDir::tempPath() zurückgegeben wird.

Siehe auch setFileTemplate(), fileTemplate(), fileName(), und QDir::tempPath().

[explicit] QTemporaryFile::QTemporaryFile(QObject *parent)

Konstruiert eine QTemporaryFile mit der angegebenen parent.

Die Standardvorlage für den Dateinamen ergibt sich aus dem von QCoreApplication::applicationName() zurückgegebenen Anwendungsnamen (oder "qt_temp", wenn der Anwendungsname leer ist), gefolgt von ".XXXXXX". Die Datei wird im temporären Verzeichnis des Systems gespeichert, das von QDir::tempPath() zurückgegeben wird.

Siehe auch setFileTemplate().

[explicit] QTemporaryFile::QTemporaryFile(const QString &templateName)

Konstruiert eine QTemporaryFile mit templateName als Vorlage für den Dateinamen.

Beim Öffnen der temporären Datei wird templateName zur Erstellung eines eindeutigen Dateinamens verwendet.

Wenn der Dateiname (der Teil nach dem letzten Verzeichnispfad-Trennzeichen in templateName) nicht "XXXXXX" enthält, wird er 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, ist der Pfad relativ zum aktuellen Arbeitsverzeichnis. Sie können QDir::tempPath() verwenden, um templateName zu 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 nur Dateien innerhalb desselben Volumes / Dateisystems umbenennen kann, in dem die temporäre Datei selbst erstellt wurde.

Siehe auch open() und fileTemplate().

QTemporaryFile::QTemporaryFile(const QString &templateName, QObject *parent)

Konstruiert eine QTemporaryFile mit dem angegebenen parent und templateName als Dateinamensvorlage.

Beim Öffnen der temporären Datei wird templateName zur Erstellung eines eindeutigen Dateinamens verwendet.

Wenn der Dateiname (der Teil nach dem letzten Verzeichnispfad-Trennzeichen in templateName) nicht "XXXXXX" enthält, wird er 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, ist der Pfad relativ zum aktuellen Arbeitsverzeichnis. Sie können QDir::tempPath() verwenden, um templateName zu 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 nur Dateien innerhalb desselben Volumes / Dateisystems umbenennen kann, in 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()

Zerstört das temporäre Datei-Objekt, die Datei wird automatisch geschlossen, falls erforderlich, und im Modus "Automatisches Entfernen" wird die Datei automatisch gelöscht.

Siehe auch autoRemove().

bool QTemporaryFile::autoRemove() const

Gibt true zurück, wenn sich QTemporaryFile im automatischen Löschmodus befindet. Im Modus "Automatisches Entfernen" wird der Dateiname bei der Zerstörung automatisch von der Festplatte gelöscht. Dies macht es sehr einfach, Ihr QTemporaryFile Objekt auf dem Stack zu erstellen, es mit Daten zu füllen, daraus zu lesen und schließlich bei der Rückkehr der Funktion automatisch aufzuräumen, nachdem es selbst gelöscht wurde.

Das automatische Entfernen ist standardmäßig aktiviert.

Siehe auch setAutoRemove() und remove().

[static] QTemporaryFile *QTemporaryFile::createNativeFile(QFile &file)

Wenn file nicht bereits eine native Datei ist, wird in QDir::tempPath() eine QTemporaryFile erstellt, der Inhalt von file dorthin kopiert und ein Zeiger auf die temporäre Datei zurückgegeben. Führt nichts aus und gibt 0 zurück, wenn file bereits eine systemeigene Datei ist.

Ein Beispiel:

  QFile f(":/resources/file.txt");
  QTemporaryFile::createNativeFile(f); // Returns a pointer to a temporary file

  QFile f("/users/qt/file.txt");
  QTemporaryFile::createNativeFile(f); // Returns 0

Siehe auch QFileInfo::isNativePath().

[static] QTemporaryFile *QTemporaryFile::createNativeFile(const QString &fileName)

Dies ist eine überladene Funktion.

Arbeitet mit dem angegebenen fileName und nicht mit einem bestehenden QFile Objekt.

[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

Reimplements: QFile::fileName() const.

Gibt den vollständigen eindeutigen Dateinamen zurück, der das Objekt QTemporaryFile unterstützt. Diese Zeichenkette ist null, bevor QTemporaryFile geöffnet wird, danach enthält sie fileTemplate() plus zusätzliche Zeichen, um sie eindeutig zu machen.

Der von dieser Methode zurückgegebene Dateiname ist relativ oder absolut, je nachdem, ob die Dateinamensvorlage, die zur Erstellung dieses Objekts verwendet (oder an setFileTemplate() übergeben) wurde, relativ oder absolut ist.

Siehe auch fileTemplate().

QString QTemporaryFile::fileTemplate() const

Gibt die Dateinamenvorlage zurück.

Die von dieser Methode zurückgegebene Dateinamensvorlage ist relativ oder absolut, je nachdem, ob die Dateinamensvorlage, die zur Erstellung dieses Objekts verwendet (oder an setFileTemplate() übergeben) wurde, relativ oder 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.

Beim ersten Aufruf erstellt open() einen eindeutigen Dateinamen auf der Grundlage von fileTemplate(). Die Datei wurde garantiert von dieser Funktion erstellt (d. h. sie hat vorher noch nie existiert).

Wenn eine Datei nach dem Aufruf von close() erneut geöffnet wird, wird dieselbe Datei erneut geöffnet.

Siehe auch setFileTemplate() und QT_USE_NODISCARD_FILE_OPEN.

[override virtual protected] bool QTemporaryFile::open(QIODeviceBase::OpenMode mode)

Reimplements: QFile::open(QIODeviceBase::OpenMode-Modus).

Öffnet eine eindeutige temporäre Datei im Dateisystem mit mode Flags. Gibt true zurück, wenn die Datei erfolgreich geöffnet wurde, oder bereits geöffnet war. Andernfalls wird false zurückgegeben.

Wenn open() zum ersten Mal aufgerufen wird, wird ein eindeutiger Dateiname auf der Grundlage von fileTemplate() erstellt und die Datei mit mode Flags geöffnet. Die Datei wurde garantiert von dieser Funktion erstellt (d. h. sie hat vorher noch nie existiert).

Wenn eine Datei nach dem Aufruf von close() erneut geöffnet wird, wird dieselbe Datei erneut mit mode flags 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 dies erfolgreich war.

Diese Funktion hat einen wichtigen Unterschied zu QFile::rename(): Sie führt kein Kopieren+Löschen durch, wenn der Low-Level-Systemaufruf zum Umbenennen der Datei fehlschlägt, was passieren könnte, wenn newName eine Datei in einem anderen Volume oder Dateisystem angibt, als die temporäre Datei erstellt wurde. Mit anderen Worten: QTemporaryFile unterstützt nur die atomare Umbenennung von Dateien.

Diese Funktionalität ist dazu gedacht, die Zieldatei mit allen bereits vorhandenen Inhalten zu materialisieren, so dass ein anderer Prozess eine unvollständige Datei nicht sehen kann, die gerade geschrieben wird. Die Klasse QSaveFile kann auch für einen ähnlichen Zweck verwendet werden, insbesondere wenn die Zieldatei nicht temporär ist.

Siehe auch 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.

void QTemporaryFile::setAutoRemove(bool b)

Setzt die QTemporaryFile in den Modus der automatischen Entfernung, wenn b true 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, wenn 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 zu erhalten, und versuchen Sie niemals, den Namen zu erraten, den QTemporaryFile generiert hat.

Wenn fileName() nicht vor dem Schließen der Datei aufgerufen wird, kann die temporäre Datei auf manchen Systemen unabhängig vom Status dieser Eigenschaft entfernt werden. Auf dieses Verhalten sollte man sich nicht verlassen, daher sollte der Anwendungscode entweder fileName() aufrufen oder die Funktion zum automatischen Entfernen aktiviert lassen.

Siehe auch autoRemove() und remove().

void QTemporaryFile::setFileTemplate(const QString &templateName)

Setzt die Dateinamenvorlage auf templateName.

Wenn der Dateiname (der Teil nach dem letzten Verzeichnispfad-Trennzeichen in templateName) nicht "XXXXXX" enthält, wird er 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, ist der Pfad relativ zum aktuellen Arbeitsverzeichnis. Sie können QDir::tempPath() verwenden, um templateName zu 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 nur Dateien innerhalb desselben Datenträgers / Dateisystems umbenennen kann, in 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.

© 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.