QSaveFile Class
La classe QSaveFile offre une interface permettant d'écrire en toute sécurité dans des fichiers. En savoir plus...
| En-tête : | #include <QSaveFile> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Hérite de : | QFileDevice |
- Liste de tous les membres, y compris les membres hérités
- QSaveFile fait partie de la catégorie « Entrée/Sortie et réseau ».
Remarque : toutes les fonctions de cette classe sont réentrantes.
Fonctions publiques
| 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) |
Fonctions publiques réimplémentées
| 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 |
Fonctions protégées réimplémentées
| virtual qint64 | writeData(const char *data, qint64 len) override |
Description détaillée
QSaveFile est un périphérique d’E/S permettant d’écrire des fichiers texte et binaires sans perdre les données existantes en cas d’échec de l’opération d’écriture.
Pendant l'écriture, le contenu est enregistré dans un fichier temporaire et, si aucune erreur ne se produit, la fonction commit() le transfère vers le fichier final. Cela garantit qu’aucune donnée du fichier final n’est perdue en cas d’erreur lors de l’écriture, et qu’aucun fichier partiellement écrit ne se retrouve jamais à l’emplacement final. Utilisez toujours QSaveFile pour enregistrer des documents entiers sur le disque.
QSaveFile détecte automatiquement les erreurs lors de l’écriture, telles que le cas d’une partition pleine, où la fonction write() ne peut pas écrire tous les octets. Il mémorise qu’une erreur s’est produite et supprime le fichier temporaire dans commit().
Tout comme avec ` QFile`, le fichier est ouvert avec ` open()`. Les données sont généralement lues et écrites à l’aide de ` QDataStream ` ou ` QTextStream`, mais vous pouvez également appeler directement ` write()`.
Contrairement à QFile, l'appel de close() n'est pas autorisé. commit() le remplace. Si commit() n'a pas été appelé et que l'instance QSaveFile est détruite, le fichier temporaire est supprimé.
Pour interrompre l’enregistrement en raison d’une erreur d’application, appelez ` cancelWriting()`, de sorte que même un appel ultérieur à ` commit()` n’entraîne pas d’enregistrement.
Voir également QTextStream, QDataStream, QFileInfo, QDir, QFile et QTemporaryFile.
Documentation sur les fonctions membres
[explicit] QSaveFile::QSaveFile(QObject *parent = nullptr)
Crée un nouvel objet fichier à partir de l'parent. Vous devez appeler la fonction ` setFileName()` avant ` open()`.
[explicit] QSaveFile::QSaveFile(const QString &name, QObject *parent = nullptr)
Crée un nouvel objet fichier avec l’ parent fournie pour représenter le fichier dont l’ name est spécifiée.
[since 6.11] QSaveFile::QSaveFile(const std::filesystem::path &path, QObject *parent = nullptr)
Crée un nouvel objet fichier avec l'parent donnée pour représenter le fichier dont l'path est spécifiée.
Cette fonction a été introduite dans Qt 6.11.
[virtual noexcept] QSaveFile::~QSaveFile()
Détruit l'objet fichier, en supprimant le contenu enregistré, sauf si la fonction ` commit()` a été appelée.
void QSaveFile::cancelWriting()
Annule l'écriture du nouveau fichier.
Si l'application change d'avis pendant l'enregistrement, elle peut appeler la fonction `cancelWriting()`, qui définit un code d'erreur afin que la fonction ` commit()` supprime le fichier temporaire.
Sinon, elle peut simplement veiller à ne pas appeler la méthode ` commit()`.
D'autres opérations d'écriture sont possibles après l'appel de cette méthode, mais aucune n'aura d'effet : le fichier écrit sera supprimé.
Cette méthode n’a aucun effet lorsque le repli sur l’écriture directe est utilisé. C’est le cas lors de l’enregistrement par-dessus un fichier existant dans un répertoire en lecture seule : aucun fichier temporaire ne peut être créé, le fichier existant est donc écrasé quoi qu’il arrive, et cancelWriting() ne peut rien y faire ; le contenu du fichier existant sera perdu.
Voir également ` commit()`.
bool QSaveFile::commit()
Enregistre les modifications sur le disque, si toutes les écritures précédentes ont abouti.
Il est obligatoire d'appeler cette fonction à la fin de l'opération d'enregistrement, sinon le fichier sera ignoré.
Si une erreur s'est produite pendant l'écriture, supprime le fichier temporaire et renvoie « false ». Sinon, le renomme en lui attribuant le nom définitif « fileName » et renvoie « true » en cas de succès. Enfin, ferme le périphérique.
Voir également cancelWriting().
bool QSaveFile::directWriteFallback() const
Renvoie « true » si la solution de secours pour l'enregistrement de fichiers dans des répertoires en lecture seule est activée.
Voir également setDirectWriteFallback().
[override virtual] QString QSaveFile::fileName() const
Réimplémente : ` QFileDevice::fileName()` const.
Renvoie le nom défini par setFileName() ou par le constructeur QSaveFile.
Voir aussi setFileName().
[since 6.11] std::filesystem::path QSaveFile::filesystemFileName() const
Renvoie fileName() sous la forme std::filesystem::path.
Cette fonction a été introduite dans Qt 6.11.
[override virtual] bool QSaveFile::open(QIODeviceBase::OpenMode mode)
Réimplémente : ` QIODevice::open` (mode `QIODeviceBase::OpenMode`).
Ouvre le fichier en utilisant les indicateurs mode fournis.
Renvoie ` true ` en cas de succès ; sinon, renvoie ` false`.
Important : les indicateurs pour mode doivent inclure QIODeviceBase::WriteOnly. D’autres indicateurs courants que vous pouvez utiliser sont Text et Unbuffered. Les indicateurs non pris en charge pour le moment sont ReadOnly (et donc ReadWrite), Append, NewOnly et ExistingOnly; ils génèrent un avertissement d’exécution.
Voir également setFileName() et QT_USE_NODISCARD_FILE_OPEN.
[override virtual, since 6.12] QFileDevice::Permissions QSaveFile::permissions() const
Réimplémente : ` QFileDevice::permissions()` const.
Renvoie les droits d'accès qui seront attribués au fichier si l'appel à ` commit()` aboutit.
Cette fonction a été introduite dans Qt 6.12.
Voir également ` setPermissions()`.
void QSaveFile::setDirectWriteFallback(bool enabled)
Permet de réécrire le fichier existant si nécessaire.
QSaveFile Crée un fichier temporaire dans le même répertoire que le fichier final et le renomme de manière atomique. Toutefois, cela n’est pas possible si les droits d’accès au répertoire ne permettent pas la création de nouveaux fichiers. Afin de préserver les garanties d’atomicité, la fonction ` open()` échoue lorsqu’elle ne peut pas créer le fichier temporaire.
Afin de permettre aux utilisateurs de modifier des fichiers pour lesquels ils disposent d’autorisations d’écriture dans un répertoire aux droits d’accès restreints, appelez `setDirectWriteFallback()` en définissant ` enabled ` sur `true` ; les appels suivants à ` open()` se rabattront alors sur l’ouverture directe du fichier existant et l’écriture dans celui-ci, sans recourir à un fichier temporaire. Cette méthode n’offre aucune garantie d’atomicité ; ainsi, un plantage de l’application ou, par exemple, une coupure de courant pourrait entraîner l’écriture partielle d’un fichier sur le disque. Cela signifie également que la méthode ` cancelWriting()` n’a aucun effet dans un tel cas.
En règle générale, pour enregistrer des documents modifiés par l'utilisateur, appelez setDirectWriteFallback(true), et pour enregistrer des fichiers internes à l'application (fichiers de configuration, fichiers de données, etc.), conservez le paramètre par défaut qui garantit l'atomicité.
Voir également directWriteFallback().
void QSaveFile::setFileName(const QString &name)
Définit l'name du fichier. Le nom peut être un chemin vide, un chemin relatif ou un chemin absolu.
Voir également ` QFile::setFileName()` et ` fileName()`.
[since 6.11] void QSaveFile::setFileName(const std::filesystem::path &name)
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.11.
[override virtual, since 6.12] bool QSaveFile::setPermissions(QFileDevice::Permissions permissions)
Réimplémente : ` QFileDevice::setPermissions` (autorisations de type `QFileDevice::Permissions`).
Définit les permissions s qui seront attribuées au fichier en cas de réussite de la fonction ` commit()`.
Lors de l’écriture via QSaveFile, le fichier peut se voir attribuer des permissions plus restrictives.
Cette fonction a été introduite dans Qt 6.12.
Voir également permissions().
[override virtual protected] qint64 QSaveFile::writeData(const char *data, qint64 len)
Réimplémente : 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.