QTemporaryFile Class
La classe QTemporaryFile est un périphérique d'E/S qui opère sur les fichiers temporaires. Plus d'informations...
| En-tête : | #include <QTemporaryFile> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Héritages : | QFile |
- Liste de tous les membres, y compris les membres hérités
- QTemporaryFile fait partie de Entrées/Sorties et Réseaux.
Note : Toutes les fonctions de cette classe sont réentrantes.
Fonctions publiques
| 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) |
Fonctions publiques réimplémentées
| virtual QString | fileName() const override |
Membres publics statiques
| QTemporaryFile * | createNativeFile(QFile &file) |
| QTemporaryFile * | createNativeFile(const QString &fileName) |
(since 6.7) QTemporaryFile * | createNativeFile(const std::filesystem::path &fileName) |
Fonctions protégées réimplémentées
| virtual bool | open(QIODeviceBase::OpenMode mode) override |
Description détaillée
QTemporaryFile est utilisé pour créer des fichiers temporaires uniques en toute sécurité. Le fichier lui-même est créé en appelant open(). Le nom du fichier temporaire est garanti unique (c'est-à-dire que vous êtes assuré de ne pas écraser un fichier existant), et le fichier sera ensuite supprimé lors de la destruction de l'objet QTemporaryFile. Il s'agit d'une technique importante qui permet d'éviter la corruption des données pour les applications qui stockent des données dans des fichiers temporaires. Le nom du fichier est soit généré automatiquement, soit créé sur la base d'un modèle, qui est transmis au constructeur de QTemporaryFile.
Exemple :
// 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.
La réouverture d'un QTemporaryFile après l'appel à close() est sans danger. Tant que l'objet QTemporaryFile lui-même n'est pas détruit, le fichier temporaire unique existe et est maintenu ouvert en interne par QTemporaryFile.
Le nom du fichier temporaire peut être trouvé en appelant fileName(). Notez que ce nom n'est défini qu'après la première ouverture du fichier ; la fonction renvoie une chaîne vide avant cela.
Un fichier temporaire aura une partie statique du nom et une partie calculée pour être unique. Le nom de fichier par défaut sera déterminé par QCoreApplication::applicationName() (sinon qt_temp) et sera placé dans le chemin temporaire renvoyé par QDir::tempPath(). Si vous spécifiez votre propre nom de fichier, un chemin d'accès relatif ne sera pas placé dans le répertoire temporaire par défaut, mais sera relatif au répertoire de travail actuel.
Il est important de spécifier le bon répertoire si la fonction rename() est appelée, car QTemporaryFile ne peut renommer les fichiers que dans le même volume / système de fichiers que celui dans lequel le fichier temporaire a été créé.
Le nom du fichier (la partie située après le dernier séparateur de chemin de répertoire dans le modèle de fichier spécifié) peut contenir la séquence spéciale "XXXXXX" (au moins six caractères majuscules "X" ), qui sera remplacée par la partie du nom de fichier générée automatiquement. Si le nom de fichier ne contient pas "XXXXXX", QTemporaryFile ajoutera la partie générée au nom de fichier. Seule la dernière occurrence de "XXXXXX" sera prise en compte.
Remarque : sous Linux, QTemporaryFile tente de créer des fichiers temporaires sans nom. Si cela réussit, open() renverra vrai mais exists() sera faux. Si vous appelez fileName() ou toute autre fonction qui l'appelle, QTemporaryFile donnera un nom au fichier, de sorte que la plupart des applications ne verront pas de différence.
Voir également QDir::tempPath() et QFile.
Documentation des fonctions membres
QTemporaryFile::QTemporaryFile()
Construit un QTemporaryFile.
Le modèle de nom de fichier par défaut est déterminé à partir du nom de l'application tel qu'il est renvoyé par QCoreApplication::applicationName() (ou "qt_temp" si le nom de l'application est vide), suivi de ".XXXXXX". Le fichier est stocké dans le répertoire temporaire du système, tel que renvoyé par QDir::tempPath().
Voir également setFileTemplate(), fileTemplate(), fileName() et QDir::tempPath().
[explicit] QTemporaryFile::QTemporaryFile(QObject *parent)
Construit un QTemporaryFile avec l'adresse parent.
Le modèle de nom de fichier par défaut est déterminé à partir du nom de l'application tel qu'il est renvoyé par QCoreApplication::applicationName() (ou "qt_temp" si le nom de l'application est vide), suivi de ".XXXXXX". Le fichier est stocké dans le répertoire temporaire du système, comme indiqué par QDir::tempPath().
Voir aussi setFileTemplate().
[explicit] QTemporaryFile::QTemporaryFile(const QString &templateName)
Construit un QTemporaryFile avec templateName comme modèle de nom de fichier.
Lors de l'ouverture du fichier temporaire, templateName sera utilisé pour créer un nom de fichier unique.
Si le nom de fichier (la partie après le dernier séparateur de chemin de répertoire dans templateName) ne contient pas "XXXXXX", il sera ajouté automatiquement.
"XXXXXX" sera remplacé par la partie dynamique du nom de fichier, qui est calculée pour être unique.
Si templateName est un chemin relatif, le chemin sera relatif au répertoire de travail actuel. Vous pouvez utiliser QDir::tempPath() pour construire templateName si vous souhaitez utiliser le répertoire temporaire du système.
Il est important de spécifier le bon répertoire si la fonction rename() est appelée, car QTemporaryFile ne peut renommer les fichiers que dans le même volume/système de fichiers que celui dans lequel le fichier temporaire a été créé.
Voir également open() et fileTemplate().
QTemporaryFile::QTemporaryFile(const QString &templateName, QObject *parent)
Construit un QTemporaryFile avec l'adresse parent spécifiée et templateName comme modèle de nom de fichier.
Lors de l'ouverture du fichier temporaire, templateName sera utilisé pour créer un nom de fichier unique.
Si le nom de fichier (la partie après le dernier séparateur de chemin de répertoire dans templateName) ne contient pas "XXXXXX", il sera ajouté automatiquement.
"XXXXXX" sera remplacé par la partie dynamique du nom de fichier, qui est calculée pour être unique.
Si templateName est un chemin relatif, le chemin sera relatif au répertoire de travail actuel. Vous pouvez utiliser QDir::tempPath() pour construire templateName si vous souhaitez utiliser le répertoire temporaire du système. Il est important de spécifier le bon répertoire si la fonction rename() est appelée, car QTemporaryFile ne peut renommer les fichiers que dans le même volume/système de fichiers que celui dans lequel le fichier temporaire a été créé.
Voir également open() et fileTemplate().
[explicit, since 6.7] QTemporaryFile::QTemporaryFile(const std::filesystem::path &templateName, QObject *parent = nullptr)
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.7.
[virtual noexcept] QTemporaryFile::~QTemporaryFile()
Détruit l'objet fichier temporaire, le fichier est automatiquement fermé si nécessaire et s'il est en mode de suppression automatique, le fichier est automatiquement supprimé.
Voir aussi autoRemove().
bool QTemporaryFile::autoRemove() const
Renvoie true si le site QTemporaryFile est en mode de suppression automatique. Ce mode supprime automatiquement le nom du fichier sur le disque lors de sa destruction. Il est ainsi très facile de créer un objet QTemporaryFile sur la pile, de le remplir avec des données, de lire des informations à partir de cet objet et, enfin, de le nettoyer automatiquement lors du retour de la fonction.
La fonction Auto-remove est activée par défaut.
Voir aussi setAutoRemove() et remove().
[static] QTemporaryFile *QTemporaryFile::createNativeFile(QFile &file)
Si file n'est pas déjà un fichier natif, un QTemporaryFile est créé dans QDir::tempPath(), le contenu de file y est copié et un pointeur sur le fichier temporaire est renvoyé. Ne fait rien et renvoie 0 si file est déjà un fichier natif.
Par exemple :
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 0
Voir aussi QFileInfo::isNativePath().
[static] QTemporaryFile *QTemporaryFile::createNativeFile(const QString &fileName)
Travaille sur l'objet fileName donné plutôt que sur un objet QFile existant.
Il s'agit d'une fonction surchargée.
[static, since 6.7] QTemporaryFile *QTemporaryFile::createNativeFile(const std::filesystem::path &fileName)
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.7.
[override virtual] QString QTemporaryFile::fileName() const
Réimplémente : QFile::fileName() const.
Renvoie le nom de fichier unique complet soutenant l'objet QTemporaryFile. Cette chaîne est nulle avant l'ouverture de QTemporaryFile, après quoi elle contiendra fileTemplate() plus des caractères supplémentaires pour la rendre unique.
Le nom de fichier renvoyé par cette méthode est relatif ou absolu, selon que le modèle de nom de fichier utilisé pour construire cet objet (ou transmis à setFileTemplate()) est relatif ou absolu, respectivement.
Voir aussi fileTemplate().
QString QTemporaryFile::fileTemplate() const
Renvoie le modèle de nom de fichier.
Le modèle de nom de fichier renvoyé par cette méthode sera relatif ou absolu en fonction du modèle de nom de fichier utilisé pour construire cet objet (ou transmis à setFileTemplate()) qui est relatif ou absolu, respectivement.
Voir aussi setFileTemplate(), fileName() et Default File Name Template.
bool QTemporaryFile::open()
Ouvre un fichier temporaire unique dans le système de fichiers en mode QIODeviceBase::ReadWrite. Renvoie true si le fichier a été ouvert avec succès ou s'il était déjà ouvert. Sinon, il renvoie false.
S'il est appelé pour la première fois, open() crée un nom de fichier unique basé sur fileTemplate(). Il est garanti que le fichier a été créé par cette fonction (c'est-à-dire qu'il n'a jamais existé auparavant).
Si un fichier est rouvert après l'appel à close(), le même fichier sera à nouveau ouvert.
Voir aussi setFileTemplate() et QT_USE_NODISCARD_FILE_OPEN.
[override virtual protected] bool QTemporaryFile::open(QIODeviceBase::OpenMode mode)
Réimplémente : QFile::open(mode QIODeviceBase::OpenMode).
Ouvre un fichier temporaire unique dans le système de fichiers avec les drapeaux mode. Renvoie true si le fichier a été ouvert avec succès ou s'il était déjà ouvert. Sinon, il renvoie false.
S'il est appelé pour la première fois, open() créera un nom de fichier unique basé sur fileTemplate(), et l'ouvrira avec les drapeaux mode. Il est garanti que le fichier a été créé par cette fonction (c'est-à-dire qu'il n'a jamais existé auparavant).
Si un fichier est rouvert après l'appel à close(), le même fichier sera à nouveau ouvert avec les drapeaux mode.
Voir aussi setFileTemplate() et QT_USE_NODISCARD_FILE_OPEN.
bool QTemporaryFile::rename(const QString &newName)
Renomme le fichier temporaire actuel en newName et renvoie true s'il a réussi.
Cette fonction présente une différence importante par rapport à QFile::rename() : elle n'effectue pas de copie+suppression si l'appel système de bas niveau pour renommer le fichier échoue, ce qui pourrait se produire si newName spécifie un fichier dans un volume ou un système de fichiers différent de celui sur lequel le fichier temporaire a été créé. En d'autres termes, QTemporaryFile ne prend en charge que le renommage atomique des fichiers.
Cette fonctionnalité est destinée à matérialiser le fichier de destination avec tout le contenu déjà présent, de sorte qu'un autre processus ne puisse pas voir un fichier incomplet en cours d'écriture. La classe QSaveFile peut être utilisée dans un but similaire, en particulier si le fichier de destination n'est pas temporaire.
Remarque : l'appel à rename() ne désactive pas autoRemove. Si vous voulez que le fichier renommé persiste, vous devez appeler setAutoRemove et lui donner la valeur false après avoir appelé rename(). Sinon, le fichier sera supprimé lorsque l'objet QTemporaryFile sera détruit.
Cette fonction échoue si newName existe déjà. Pour le remplacer, utilisez plutôt renameOverwrite().
Voir aussi renameOverwrite(), QSaveFile, QSaveFile::commit(), et QFile::rename().
[since 6.7] bool QTemporaryFile::rename(const std::filesystem::path &newName)
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.7.
[since 6.11] bool QTemporaryFile::renameOverwrite(const QString &newName)
C'est la même chose que rename(), sauf qu'il remplace atomiquement newName s'il existe déjà, comme QSaveFile::commit() le fait aussi.
Retourne false si le renommage n'a pas pu être effectué de manière atomique (par exemple, le fichier temporaire et le nom du fichier cible se trouvent sur des systèmes de fichiers / volumes / lecteurs différents).
Cette fonction a été introduite dans Qt 6.11.
Voir aussi rename(), QSaveFile, QSaveFile::commit(), et QFile::rename().
[since 6.11] bool QTemporaryFile::renameOverwrite(const std::filesystem::path &newName)
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.11.
void QTemporaryFile::setAutoRemove(bool b)
Met le site QTemporaryFile en mode de suppression automatique si b est true.
La suppression automatique est activée par défaut.
Si vous attribuez la valeur false à cette propriété, assurez-vous que l'application fournit un moyen de supprimer le fichier lorsqu'il n'est plus nécessaire, y compris en transférant la responsabilité à un autre processus. Utilisez toujours la fonction fileName() pour obtenir le nom et n'essayez jamais de deviner le nom généré par QTemporaryFile.
Sur certains systèmes, si la fonction fileName() n'est pas appelée avant la fermeture du fichier, le fichier temporaire peut être supprimé quel que soit l'état de cette propriété. Il ne faut pas se fier à ce comportement, le code de l'application doit donc appeler fileName() ou laisser la fonctionnalité de suppression automatique activée.
Voir aussi autoRemove() et remove().
void QTemporaryFile::setFileTemplate(const QString &templateName)
Définit le modèle de nom de fichier à templateName.
Si le nom de fichier (la partie après le dernier séparateur de chemin de répertoire dans templateName) ne contient pas "XXXXXX", il sera ajouté automatiquement.
"XXXXXX" sera remplacé par la partie dynamique du nom de fichier, qui est calculée pour être unique.
Si templateName est un chemin relatif, le chemin sera relatif au répertoire de travail actuel. Vous pouvez utiliser QDir::tempPath() pour construire templateName si vous souhaitez utiliser le répertoire temporaire du système. Il est important de spécifier le bon répertoire si la fonction rename() est appelée, car QTemporaryFile ne peut renommer les fichiers que dans le même volume / système de fichiers que celui dans lequel le fichier temporaire a été créé.
Voir également fileTemplate() et fileName().
[since 6.7] void QTemporaryFile::setFileTemplate(const std::filesystem::path &name)
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.7.
© 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.