QSaveFile Class
La classe QSaveFile fournit une interface permettant d'écrire en toute sécurité dans des fichiers. Plus d'informations...
| En-tête : | #include <QSaveFile> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Héritages : | QFileDevice |
- Liste de tous les membres, y compris les membres hérités
- QSaveFile fait partie de Entrées/Sorties et Réseaux.
Note : 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
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 si l'opération d'écriture échoue.
Lors de l'écriture, le contenu est écrit dans un fichier temporaire, et si aucune erreur n'est survenue, commit() le déplace dans 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 n'est jamais présent à l'emplacement final. Utilisez toujours QSaveFile pour enregistrer des documents entiers sur le disque.
QSaveFile détecte automatiquement les erreurs lors de l'écriture, comme dans le cas d'une partition complète, où write() ne peut pas écrire tous les octets. Il se souviendra qu'une erreur s'est produite et rejettera le fichier temporaire dans commit().
Comme pour 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 à 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 à commit() ultérieur n'entraînera pas d'enregistrement.
Voir aussi QTextStream, QDataStream, QFileInfo, QDir, QFile, et QTemporaryFile.
Documentation des fonctions membres
[explicit] QSaveFile::QSaveFile(QObject *parent = nullptr)
Construit un nouvel objet fichier avec l'adresse parent. Vous devez appeler setFileName() avant open().
[explicit] QSaveFile::QSaveFile(const QString &name, QObject *parent = nullptr)
Construit un nouvel objet fichier avec l'adresse parent donnée pour représenter le fichier avec l'adresse name spécifiée.
[since 6.11] QSaveFile::QSaveFile(const std::filesystem::path &path, QObject *parent = nullptr)
Construit un nouvel objet fichier avec l'adresse parent donnée pour représenter le fichier avec l'adresse path 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 sauvegardé à moins que commit() n'ait été appelé.
void QSaveFile::cancelWriting()
Annule l'écriture du nouveau fichier.
Si l'application change d'avis pendant l'enregistrement, elle peut appeler cancelWriting(), qui définit un code d'erreur de sorte que commit() se débarrasse du fichier temporaire.
Elle peut aussi simplement s'assurer de ne pas appeler 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 l'écriture directe est utilisée. C'est le cas lors de l'enregistrement d'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 aussi commit().
bool QSaveFile::commit()
Valide les modifications sur le disque, si toutes les écritures précédentes ont été effectuées avec succès.
Il est obligatoire d'appeler cette fonction à la fin de l'opération d'enregistrement, sinon le fichier sera supprimé.
Si une erreur s'est produite pendant l'écriture, il supprime le fichier temporaire et renvoie false. Sinon, il le renomme en fileName et renvoie true en cas de succès. Enfin, il ferme le périphérique.
Voir aussi cancelWriting().
bool QSaveFile::directWriteFallback() const
Renvoie true si la solution de repli pour l'enregistrement de fichiers dans des répertoires en lecture seule est activée.
Voir aussi setDirectWriteFallback().
[override virtual] QString QSaveFile::fileName() const
Réimplémente : QFileDevice::fileName() const.
Renvoie le nom défini par setFileName() ou au 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(QIODeviceBase::OpenMode mode).
Ouvre le fichier en utilisant les drapeaux mode. Renvoie true en cas de succès, sinon false.
Important : les drapeaux pour mode doivent inclure QIODeviceBase::WriteOnly. Les autres drapeaux courants que vous pouvez utiliser sont Text et Unbuffered. Les drapeaux non pris en charge pour le moment sont ReadOnly (et donc ReadWrite), Append, NewOnly et ExistingOnly; ils génèreront un avertissement d'exécution.
Voir aussi setFileName() et QT_USE_NODISCARD_FILE_OPEN.
void QSaveFile::setDirectWriteFallback(bool enabled)
Permet d'écrire sur 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 autorisations du répertoire ne permettent pas de créer de nouveaux fichiers. Afin de préserver les garanties d'atomicité, open() échoue s'il ne peut pas créer le fichier temporaire.
Pour permettre aux utilisateurs de modifier des fichiers avec des droits d'écriture dans un répertoire aux droits restreints, appelez setDirectWriteFallback() avec enabled à true, et les appels suivants à open() se rabattront sur l'ouverture directe du fichier existant et sur l'écriture dans ce fichier, sans utiliser de fichier temporaire. Cela ne garantit pas l'atomicité, c'est-à-dire qu'un plantage de l'application ou, par exemple, une coupure de courant peut entraîner l'existence d'un fichier partiellement écrit sur le disque. Cela signifie également que cancelWriting() n'a aucun effet dans un tel cas.
Typiquement, pour sauvegarder des documents édités par l'utilisateur, appelez setDirectWriteFallback(true), et pour sauvegarder des fichiers internes à l'application (fichiers de configuration, fichiers de données, ...), conservez le réglage par défaut qui assure l'atomicité.
Voir aussi directWriteFallback().
void QSaveFile::setFileName(const QString &name)
Définit l'adresse name du fichier. Le nom peut ne pas avoir de chemin d'accès, avoir un chemin d'accès relatif ou un chemin d'accès absolu.
Voir aussi 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 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.