Sur cette page

QFile Class

La classe QFile fournit une interface permettant de lire et d'écrire dans des fichiers. En savoir plus...

En-tête : #include <QFile>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Hérite de : QFileDevice
Hérité par :

QTemporaryFile

Remarque : toutes les fonctions de cette classe sont réentrantes.

Fonctions publiques

QFile()
QFile(QObject *parent)
QFile(const QString &name)
(since 6.0) QFile(const std::filesystem::path &name)
QFile(const QString &name, QObject *parent)
(since 6.0) QFile(const std::filesystem::path &name, QObject *parent)
virtual ~QFile()
bool copy(const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)
(since 6.0) bool copy(const std::filesystem::path &newName)
bool exists() const
(since 6.0) std::filesystem::path filesystemFileName() const
(since 6.3) std::filesystem::path filesystemSymLinkTarget() const
bool link(const QString &linkName)
(since 6.0) bool link(const std::filesystem::path &newName)
bool moveToTrash()
(since 6.3) bool open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)
bool open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
bool open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
bool remove()
bool rename(const QString &newName)
(since 6.0) bool rename(const std::filesystem::path &newName)
void setFileName(const QString &name)
(since 6.0) void setFileName(const std::filesystem::path &name)
QString symLinkTarget() const

Fonctions publiques réimplémentées

virtual QString fileName() const override
virtual bool open(QIODeviceBase::OpenMode mode) override
virtual QFileDevice::Permissions permissions() const override
virtual bool resize(qint64 sz) override
virtual bool setPermissions(QFileDevice::Permissions permissions) override
virtual qint64 size() const override

Membres publics statiques

bool copy(const QString &fileName, const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)
QString decodeName(const QByteArray &localFileName)
QString decodeName(const char *localFileName)
QByteArray encodeName(const QString &fileName)
bool exists(const QString &fileName)
(since 6.3) std::filesystem::path filesystemSymLinkTarget(const std::filesystem::path &fileName)
bool link(const QString &fileName, const QString &linkName)
bool moveToTrash(const QString &fileName, QString *pathInTrash = nullptr)
QFileDevice::Permissions permissions(const QString &fileName)
(since 6.0) QFileDevice::Permissions permissions(const std::filesystem::path &filename)
bool remove(const QString &fileName)
bool rename(const QString &oldName, const QString &newName)
bool resize(const QString &fileName, qint64 sz)
bool setPermissions(const QString &fileName, QFileDevice::Permissions permissions)
(since 6.0) bool setPermissions(const std::filesystem::path &filename, QFileDevice::Permissions permissionSpec)
(since 6.9) bool supportsMoveToTrash()
QString symLinkTarget(const QString &fileName)

Description détaillée

QFile est un périphérique d'E/S permettant de lire et d'écrire des fichiers et des ressources textuels et binaires. Un QFile peut être utilisé seul ou, de manière plus pratique, avec un QTextStream ou un QDataStream.

Le nom du fichier est généralement passé dans le constructeur, mais il peut être défini à tout moment à l'aide de la fonction ` setFileName()`. QFile s'attend à ce que le séparateur de fichiers soit « / », quel que soit le système d'exploitation. L'utilisation d'autres séparateurs (par exemple, « \ ») n'est pas prise en charge.

Vous pouvez vérifier l’existence d’un fichier à l’aide de ` exists()` et supprimer un fichier à l’aide de ` remove()`. (Des opérations plus avancées liées au système de fichiers sont fournies par ` QFileInfo ` et ` QDir`.)

Le fichier est ouvert avec ` open()`, fermé avec ` close()` et vidé avec ` flush()`. La lecture et l’écriture des données s’effectuent généralement à l’aide de ` QDataStream ` ou ` QTextStream`, mais vous pouvez également appeler les fonctions héritées de ` QIODevice` : ` read()`, ` readLine()`, ` readAll()` et ` write()`. `QFile` hérite également de ` getChar()`, ` putChar()` et ` ungetChar()`, qui fonctionnent caractère par caractère.

La taille du fichier est renvoyée par size(). Vous pouvez obtenir la position actuelle dans le fichier à l’aide de pos(), ou vous déplacer vers une nouvelle position dans le fichier à l’aide de seek(). Si vous avez atteint la fin du fichier, atEnd() renvoie true.

Lecture directe des fichiers

L'exemple suivant lit un fichier texte ligne par ligne :

    QFile file("in.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    while (!file.atEnd()) {
        QByteArray line = file.readLine();
        process_line(line);
    }

Le drapeau « Text » passé à la fonction ` open()` indique à Qt de convertir les fins de ligne de type Windows («\r\n ») en fins de ligne de type C++ («\n »). Par défaut, `QFile` considère le fichier comme binaire, c'est-à-dire qu'il n'effectue aucune conversion sur les octets stockés dans le fichier.

Utilisation des flux pour lire des fichiers

L'exemple suivant utilise ` QTextStream ` pour lire un fichier texte ligne par ligne :

    QFile file("in.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    QTextStream in(&file);
    while (!in.atEnd()) {
        QString line = in.readLine();
        process_line(line);
    }

QTextStream se charge de convertir les données 8 bits stockées sur le disque en un QString Unicode 16 bits. Par défaut, il suppose que le fichier est encodé en UTF-8. Ce comportement peut être modifié à l'aide de la fonction ` QTextStream::setEncoding()`.

Pour écrire du texte, on peut utiliser l’opérateur <<(), qui est surchargé pour prendre un QTextStream à gauche et divers types de données (y compris QString) à droite :

    QFile file("out.txt");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
        return;

    QTextStream out(&file);
    out << "The magic number is: " << 49 << "\n";

QDataStream Le fonctionnement est similaire : vous pouvez utiliser l'opérateur <<() pour écrire des données et l'opérateur >>() pour les relire. Consultez la documentation de la classe pour plus de détails.

Signaux

Contrairement à d’autres implémentations de ` QIODevice `, telles que ` QTcpSocket`, `QFile` n’émet pas les signaux ` aboutToClose()`, ` bytesWritten()` ou ` readyRead()`. Ce détail d’implémentation signifie que `QFile` n’est pas adapté à la lecture et à l’écriture de certains types de fichiers, tels que les fichiers de périphériques sur les plateformes Unix.

Problèmes spécifiques à certaines plateformes

Les API Qt liées aux E/S utilisent des QStrings basées sur l’UTF-16 pour représenter les chemins d’accès aux fichiers. Les API C++ standard (<cstdio> ou <iostream>) ou les API spécifiques à certaines plateformes nécessitent cependant souvent un chemin d’accès encodé en 8 bits. Vous pouvez utiliser encodeName() et decodeName() pour convertir ces deux représentations l’une en l’autre.

Sous Unix, certains fichiers système particuliers (par exemple dans /proc) font que size() renvoie toujours 0, alors que vous pouvez néanmoins lire davantage de données à partir de ce fichier ; ces données sont générées en réponse directe à votre appel de read(). Dans ce cas, cependant, vous ne pouvez pas utiliser atEnd() pour déterminer s’il reste des données à lire (car atEnd() renverra true pour un fichier dont la taille est supposée être 0). Vous devez plutôt appeler readAll(), ou bien appeler read() ou readLine() à plusieurs reprises jusqu’à ce qu’il n’y ait plus de données à lire. L’exemple suivant utilise QTextStream pour lire /proc/modules ligne par ligne :

    QFile file("/proc/modules");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    QTextStream in(&file);
    QString line = in.readLine();
    while (!line.isNull()) {
        process_line(line);
        line = in.readLine();
    }

Sous Android, certaines restrictions s’appliquent lors de la gestion des URI de contenu:

Considérations de sécurité

Normalisation des chemins d'accès Windows

Les API Qt qui gèrent les chemins d'accès aux fichiers et aux répertoires effectuent la normalisation et la canonisation différemment des API natives de Windows :

  • Les points et/ou espaces à la fin ne sont pas supprimés.
  • Les noms courts au format 8.3 ne sont pas développés.
  • Les préfixes « \\?\ » et « \\?\UNC\ » sont toujours supprimés.

Ces différences permettent de contourner les contrôles de sécurité basés sur la comparaison de chaînes de caractères ou la correspondance de motifs. Par exemple, le code ci-dessous renverra « false » pour les deux comparaisons, mais en transmettant ce chemin à QFile, on parviendra à ouvrir « myapp.exe » dans « Program Files ».

const QString path = u"C:\\PROGRA~1\\MyApp\\myapp.exe."_s; // notez le point final
QFileInfo fi(path);
qDebug() << fi.canonicalFilePath().contains("Program Files"_L1); // false
qDebug() << (fi.suffix() == "exe"_L1); // false
QFile f(path) ;
f.open(QIODevice::WriteOnly); // true

Droits d'accès aux fichiers

Les droits d'accès aux fichiers sont gérés différemment sur les systèmes de type Unix et sous Windows. Dans un répertoire non writable sur les systèmes de type Unix, il est impossible de créer des fichiers. Ce n'est pas toujours le cas sous Windows, où, par exemple, le répertoire « Mes documents » n'est généralement pas accessible en écriture, mais où il est tout de même possible d'y créer des fichiers.

La prise en charge des permissions de fichiers par Qt est limitée, ce qui affecte notamment la fonction QFile::setPermissions(). Sous Windows, Qt ne définira que l'ancien indicateur « lecture seule », et ce uniquement si aucun des indicateurs Write* n'est passé. Qt ne manipule pas les listes de contrôle d’accès (ACL), ce qui rend cette fonction pratiquement inutile pour les volumes NTFS. Elle peut toutefois s’avérer utile pour les clés USB utilisant le système de fichiers VFAT. Les ACL POSIX ne sont pas non plus manipulées.

Voir également QTextStream, QDataStream, QFileInfo, QDir et Le système de ressources Qt.

Documentation des fonctions membres

QFile::QFile()

Crée un objet QFile.

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

Crée un nouvel objet fichier avec l'parent on fournie.

[explicit] QFile::QFile(const QString &name)

Crée un nouvel objet fichier pour représenter le fichier dont l'name on est indiquée.

Remarque : dans les versions jusqu’à Qt 6.8 inclus, ce constructeur est implicite, pour des raisons de compatibilité ascendante. À partir de Qt 6.9, ce constructeur est inconditionnellement de type « explicit ». Les utilisateurs peuvent forcer ce constructeur à être de type « explicit » même dans les versions antérieures de Qt en définissant la macro « QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH » avant d’inclure tout en-tête Qt.

[explicit, since 6.0] QFile::QFile(const std::filesystem::path &name)

Crée un nouvel objet fichier pour représenter le fichier dont l'name est indiquée.

Remarque : dans les versions jusqu’à Qt 6.8 inclus, ce constructeur est implicite, pour des raisons de compatibilité ascendante. À partir de Qt 6.9, ce constructeur est inconditionnellement explicit. Les utilisateurs peuvent forcer ce constructeur à être explicit même dans les versions antérieures de Qt en définissant la macro QT_EXPLICIT_QFILE_CONSTRUCTION_FROM_PATH avant d’inclure tout en-tête Qt.

Cette fonction a été introduite dans Qt 6.0.

QFile::QFile(const QString &name, QObject *parent)

Crée un nouvel objet fichier avec l'parent tion fournie pour représenter le fichier dont l'name tion est spécifiée.

[since 6.0] QFile::QFile(const std::filesystem::path &name, QObject *parent)

Crée un nouvel objet fichier avec l'parent fournie pour représenter le fichier dont l'name est spécifiée.

Cette fonction a été introduite dans Qt 6.0.

[virtual noexcept] QFile::~QFile()

Détruit l'objet fichier, en le fermant si nécessaire.

bool QFile::copy(const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)

Copie le fichier nommé « fileName » () vers « newName ».

Ce fichier est fermé avant d'être copié.

Depuis Qt 6.12, les droits d'accès perm peuvent être spécifiés lors de l'appel. S'ils ne sont pas fournis, les droits d'accès du fichier d'origine sont copiés. Le nouveau fichier sera créé avec les droits d'accès indiqués.

Si le fichier copié est un lien symbolique (symlink), c’est le fichier auquel il fait référence qui est copié, et non le lien lui-même. À l’exception des droits d’accès, aucune autre métadonnée du fichier n’est copiée.

Renvoie ` true ` en cas de succès ; sinon, renvoie ` false`.

Notez que si un fichier nommé newName existe déjà, copy() renvoie false. Cela signifie que QFile ne le remplacera pas. Cependant, l’opération n’est pas atomique. Il est possible qu’un autre processus crée un fichier nommé newName entre la vérification et la copie. Dans ce cas, le fichier sera remplacé.

Remarque : sous Android, cette opération n'est pas encore prise en charge pour les URI de type content.

Voir également setFileName().

[since 6.0] bool QFile::copy(const std::filesystem::path &newName)

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.0.

[static] bool QFile::copy(const QString &fileName, const QString &newName, std::optional<QFileDevice::Permissions> perm = std::nullopt)

Copie le fichier nommé « fileName » vers « newName ».

Depuis Qt 6.12, les droits d'accès perm peuvent être spécifiés lors de l'appel. S'ils ne sont pas fournis, les droits d'accès du fichier d'origine sont copiés. Le nouveau fichier est créé avec les droits d'accès indiqués.

Si le fichier copié est un lien symbolique (symlink), c’est le fichier auquel il fait référence qui est copié, et non le lien lui-même. À l’exception des droits d’accès, aucune autre métadonnée du fichier n’est copiée.

Renvoie ` true ` en cas de succès ; sinon, renvoie ` false`.

Notez que si un fichier portant le nom newName existe déjà, copy() renvoie false. Cela signifie que QFile ne le remplacera pas. Cependant, l’opération n’est pas atomique. Il est possible qu’un autre processus crée un fichier portant le nom newName entre la vérification et la copie. Dans ce cas, le fichier sera remplacé.

Remarque : sous Android, cette opération n’est pas encore prise en charge pour les URI de type content.

Il s'agit d'une fonction surchargée.

Voir également rename().

[static] QString QFile::decodeName(const QByteArray &localFileName)

Cette fonction effectue l'opération inverse de QFile::encodeName() en utilisant localFileName.

Voir également encodeName().

[static] QString QFile::decodeName(const char *localFileName)

Renvoie la version Unicode de l'localFileName donné. Voir encodeName() pour plus de détails.

Il s'agit d'une fonction surchargée.

[static] QByteArray QFile::encodeName(const QString &fileName)

Convertit fileName en un encodage 8 bits que vous pouvez utiliser dans les API natives. Sous Windows, l'encodage correspond à celui de la page de codes active de Windows (ANSI). Sur les autres plateformes, il s'agit de l'UTF-8, sous forme décomposée (NFD) pour macOS.

Voir également decodeName().

[static] bool QFile::exists(const QString &fileName)

Renvoie true si le fichier spécifié par fileName existe ; sinon, renvoie false.

Remarque : si fileName est un lien symbolique pointant vers un fichier inexistant, la fonction renvoie false.

bool QFile::exists() const

Renvoie « true » si le fichier spécifié par ` fileName()` existe ; sinon, renvoie « false ».

Il s'agit d'une fonction surchargée.

Voir également fileName() et setFileName().

[override virtual] QString QFile::fileName() const

Réimplémente : ` QFileDevice::fileName()` const.

Renvoie le nom du fichier tel qu’il a été défini par setFileName(), rename() ou par les constructeurs QFile.

Voir également setFileName(), rename() et QFileInfo::fileName().

[since 6.0] std::filesystem::path QFile::filesystemFileName() const

Renvoie fileName() sous la forme std::filesystem::path.

Cette fonction a été introduite dans Qt 6.0.

[since 6.3] std::filesystem::path QFile::filesystemSymLinkTarget() const

Renvoie symLinkTarget() sous la forme std::filesystem::path.

Cette fonction a été introduite dans Qt 6.3.

[static, since 6.3] std::filesystem::path QFile::filesystemSymLinkTarget(const std::filesystem::path &fileName)

Renvoie symLinkTarget() sous la forme std::filesystem::path de fileName.

Cette fonction a été introduite dans Qt 6.3.

Crée un lien nommé « linkName » pointant vers le fichier actuellement spécifié par « fileName() ». La nature de ce lien dépend du système de fichiers sous-jacent (qu'il s'agisse d'un raccourci sous Windows ou d'un lien symbolique sous Unix). Renvoie « true » en cas de réussite ; sinon, renvoie « false ».

Cette fonction n’écrasera pas une entité déjà existante dans le système de fichiers ; dans ce cas, ` link() ` renverra `false` et définira ` error()` pour qu’elle renvoie ` RenameError`.

Remarque : pour créer un lien valide sous Windows, linkName doit avoir l'extension de fichier .lnk.

Voir aussi setFileName().

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.0.

Crée un lien nommé « linkName » pointant vers le fichier « fileName ». La nature de ce lien dépend du système de fichiers sous-jacent (il peut s'agir d'un raccourci sous Windows ou d'un lien symbolique sous Unix). Renvoie « true » en cas de succès ; sinon, renvoie « false ».

Il s’agit d’une fonction surchargée.

Voir également link().

bool QFile::moveToTrash()

Déplace le fichier spécifié par fileName() vers la corbeille. Renvoie true en cas de succès, et définit fileName() sur le chemin d'accès du fichier dans la corbeille ; sinon, renvoie false.

Le temps d’exécution de cette fonction est indépendant de la taille du fichier envoyé à la corbeille. Si cette fonction est appelée sur un répertoire, ce temps peut être proportionnel au nombre de fichiers envoyés à la corbeille. Si la valeur actuelle de ` fileName()` pointe vers un lien symbolique, cette fonction enverra le lien vers la corbeille, ce qui peut le rendre inaccessible, mais pas la cible du lien.

Cette fonction utilise les API Windows et macOS pour effectuer le déplacement vers la corbeille sur ces deux systèmes d’exploitation. Ailleurs (sur les systèmes Unix), cette fonction implémente la spécification « Trash » de FreeDesktop.org, version 1.0.

Remarque : lors de l’utilisation de l’implémentation de la corbeille de FreeDesktop.org, cette fonction échouera si elle ne parvient pas à déplacer les fichiers vers l’emplacement de la corbeille par le biais de renommage de fichiers et de liens physiques. Cette situation se produit si le fichier à mettre à la corbeille se trouve sur un volume (point de montage) sur lequel l’utilisateur actuel ne dispose pas des autorisations nécessaires pour créer le répertoire ` .Trash `, ou dans le cas de certains types ou configurations inhabituels de systèmes de fichiers (tels que des sous-volumes qui ne sont pas eux-mêmes des points de montage).

Remarque : sur les systèmes où l’API système ne signale pas l’emplacement du fichier dans la corbeille, la variable fileName() sera définie sur la chaîne vide une fois le fichier déplacé. Sur les systèmes ne disposant pas de corbeille, cette fonction renvoie toujours false (voir supportsMoveToTrash()).

Voir également supportsMoveToTrash(), remove() et QDir::remove().

[static] bool QFile::moveToTrash(const QString &fileName, QString *pathInTrash = nullptr)

Déplace le fichier spécifié par fileName vers la corbeille. Renvoie true en cas de réussite, et définit pathInTrash (si fourni) sur le chemin d’accès du fichier dans la corbeille ; sinon, renvoie false.

Le temps d'exécution de cette fonction est indépendant de la taille du fichier envoyé à la corbeille. Si cette fonction est appelée sur un répertoire, ce temps peut être proportionnel au nombre de fichiers envoyés à la corbeille. Si l'fileName() actuel pointe vers un lien symbolique, cette fonction déplacera le lien vers la corbeille, ce qui risque de le rompre, et non la cible du lien.

Cette fonction utilise les API Windows et macOS pour effectuer le déplacement vers la corbeille sur ces deux systèmes d’exploitation. Ailleurs (sur les systèmes Unix), cette fonction implémente la spécification « Trash » de FreeDesktop.org, version 1.0.

Remarque : lors de l’utilisation de l’implémentation de la corbeille de FreeDesktop.org, cette fonction échouera si elle ne parvient pas à déplacer les fichiers vers l’emplacement de la corbeille par le biais de renommage de fichiers et de liens physiques. Cette situation se produit si le fichier à envoyer dans la corbeille se trouve sur un volume (point de montage) sur lequel l’utilisateur actuel ne dispose pas des droits nécessaires pour créer le répertoire ` .Trash `, ou dans le cas de certains types ou configurations inhabituels de systèmes de fichiers (tels que des sous-volumes qui ne sont pas eux-mêmes des points de montage).

Remarque : sur les systèmes où l'API système ne renvoie pas le chemin d’accès du fichier dans la corbeille, la variable ` pathInTrash ` sera définie sur la chaîne vide une fois le fichier déplacé. Sur les systèmes ne disposant pas de corbeille, cette fonction renvoie toujours `false`.

Il s'agit d'une fonction surchargée.

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

Réimplémente : QIODevice::open(mode QIODeviceBase::OpenMode).

Ouvre le fichier à l'aide des indicateurs mode et renvoie true en cas de succès ; sinon, renvoie false.

Les indicateurs pour mode doivent inclure QIODeviceBase::ReadOnly, WriteOnly ou ReadWrite. Ils peuvent également comporter des indicateurs supplémentaires, tels que Text et Unbuffered.

Remarque : en mode WriteOnly ou ReadWrite, si le fichier concerné n’existe pas encore, cette fonction tentera de créer un nouveau fichier avant de l’ouvrir. Le fichier sera créé avec le mode 0666, masqué par l’umask sur les systèmes POSIX, et avec des droits hérités du répertoire parent sous Windows. Sous Android, il est nécessaire de disposer d'un droit d'accès au répertoire parent du fichier ; dans le cas contraire, il ne sera pas possible de créer ce fichier inexistant.

Voir également QT_USE_NODISCARD_FILE_OPEN et setFileName().

[since 6.3] bool QFile::open(QIODeviceBase::OpenMode mode, QFileDevice::Permissions permissions)

Si le fichier n'existe pas et que la valeur de ` mode ` implique sa création, il est créé avec les permissions s spécifiées.

Sur les systèmes POSIX, les droits d’accès réels dépendent de la valeur de ` umask`.

Sous Windows, les droits d’accès sont émulés à l’aide d’ACL. Ces ACL peuvent ne pas respecter l’ordre canonique lorsque le groupe se voit accorder moins de droits que les autres. Les fichiers et répertoires dotés de tels droits généreront des avertissements lors de l’ouverture de l’onglet « Sécurité » de la boîte de dialogue « Propriétés ». Accorder au groupe tous les droits accordés aux autres permet d’éviter ces avertissements.

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.3.

Voir également QIODevice::OpenMode, setFileName() et QT_USE_NODISCARD_FILE_OPEN.

bool QFile::open(FILE *fh, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)

Ouvre le descripteur de fichier existant fh dans l'mode spécifié. La fonction handleFlags peut être utilisée pour spécifier des options supplémentaires. Renvoie true en cas de succès ; sinon, renvoie false.

Exemple :

#include <stdio.h>

void printError(const char* msg)
{
    QFile file;
    file.open(stderr, QIODevice::WriteOnly);
    file.write(msg, qstrlen(msg));        // write to stderr
    file.close();
}

Lorsqu’un fichier QFile est ouvert à l’aide de cette fonction, le comportement de close() est contrôlé par l’indicateur AutoCloseHandle. Si AutoCloseHandle est spécifié et que cette fonction aboutit, l’appel de close() ferme le descripteur adopté. Sinon, close() ne ferme pas réellement le fichier, mais se contente de le vider.

Avertissement :

  1. Si ` fh ` ne fait pas référence à un fichier ordinaire (par exemple, s’il s’agit de ` stdin`, ` stdout` ou ` stderr`), il se peut que vous ne puissiez pas appeler ` seek()`. Dans ces cas-là, ` size()` renvoie ` 0 `. Voir ` QIODevice::isSequential()` pour plus d’informations.
  2. Comme cette fonction ouvre le fichier sans spécifier de nom de fichier, vous ne pouvez pas utiliser cette QFile avec une QFileInfo.

Remarque concernant la plate-forme Windows

fh doit être ouvert en mode binaire (c'est-à-dire que la chaîne de mode doit contenir un « b », comme dans « rb » ou « wb ») lors de l'accès à des fichiers et à d'autres périphériques à accès aléatoire. Qt convertira les caractères de fin de ligne si vous passez QIODevice::Text à ` mode`. Les périphériques séquentiels, tels que `stdin` et `stdout`, ne sont pas concernés par cette limitation.

Vous devez activer la prise en charge des applications console afin de pouvoir utiliser les flux stdin, stdout et stderr sur la console. Pour ce faire, ajoutez la déclaration suivante au fichier de projet de votre application :

CONFIG += console

Il s’agit d’une fonction surchargée.

Voir également ` close()` et ` QT_USE_NODISCARD_FILE_OPEN`.

bool QFile::open(int fd, QIODeviceBase::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)

Ouvre le descripteur de fichier existant fd dans le fichier mode spécifié. La fonction handleFlags peut être utilisée pour spécifier des options supplémentaires. Renvoie true en cas de succès ; sinon, renvoie false.

Lorsqu’un fichier QFile est ouvert à l’aide de cette fonction, le comportement de la fonction close() est contrôlé par l’indicateur AutoCloseHandle. Si AutoCloseHandle est spécifié et que cette fonction aboutit, l’appel de close() ferme le descripteur adopté. Sinon, close() ne ferme pas réellement le fichier, mais se contente de le vider.

Avertissement : si fd n’est pas un fichier ordinaire, c’est-à-dire s’il s’agit d’un 0 (stdin), d’un 1 (stdout) ou d’un 2 (stderr), il se peut que vous ne puissiez pas appeler seek(). Dans ces cas-là, size() renvoie 0. Voir QIODevice::isSequential() pour plus d’informations.

Avertissement : comme cette fonction ouvre le fichier sans spécifier de nom de fichier, vous ne pouvez pas utiliser cette QFile avec un QFileInfo.

Il s'agit d'une fonction surchargée.

Voir également close() et QT_USE_NODISCARD_FILE_OPEN.

[override virtual] QFileDevice::Permissions QFile::permissions() const

Réimplémente : QFileDevice::permissions() const.

Voir aussi setPermissions().

[static] QFileDevice::Permissions QFile::permissions(const QString &fileName)

Renvoie la combinaison complète, via l'opérateur « OR », des QFile::Permission pour fileName.

Il s'agit d'une fonction surchargée.

[static, since 6.0] QFileDevice::Permissions QFile::permissions(const std::filesystem::path &filename)

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.0.

bool QFile::remove()

Supprime le fichier spécifié par la fonction ` fileName()`.

Renvoie true si le fichier a été supprimé avec succès ; sinon, renvoie false.

Le fichier est fermé avant d'être supprimé, s'il était ouvert.

Voir également setFileName().

[static] bool QFile::remove(const QString &fileName)

Supprime le fichier spécifié par l'fileName.

Renvoie ` true ` si le fichier a été supprimé avec succès ; sinon, renvoie ` false`.

Il s'agit d'une fonction surchargée.

Voir également remove().

bool QFile::rename(const QString &newName)

Renomme le fichier actuellement spécifié par ` fileName()` en ` newName`. Renvoie ` true ` en cas de succès ; sinon, renvoie ` false`.

Si un fichier portant le nom newName existe déjà, la fonction rename() renvoie false (c'est-à-dire que QFile ne l'écrasera pas).

Le fichier est fermé avant d’être renommé.

Si l’opération de renommage échoue, Qt tentera de copier le contenu de ce fichier vers newName, puis supprimera ce fichier, ne conservant que newName. Si cette opération de copie échoue ou si ce fichier ne peut pas être supprimé, le fichier de destination newName est supprimé afin de rétablir l’état antérieur.

Voir également setFileName().

[since 6.0] bool QFile::rename(const std::filesystem::path &newName)

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.0.

[static] bool QFile::rename(const QString &oldName, const QString &newName)

Renomme le fichier « oldName » en « newName ». Renvoie « true » en cas de succès ; sinon, renvoie « false ».

Si un fichier nommé « newName » existe déjà, la fonction rename() renvoie « false » (c'est-à-dire que « QFile » ne le remplacera pas).

Il s'agit d'une fonction surchargée.

Voir également rename().

[override virtual] bool QFile::resize(qint64 sz)

Réimplémente : QFileDevice::resize(qint64 sz).

[static] bool QFile::resize(const QString &fileName, qint64 sz)

Définit la taille (en octets) de fileName à sz. Renvoie true si le redimensionnement réussit ; false dans le cas contraire. Si sz est supérieur à la taille actuelle de fileName, les nouveaux octets seront mis à 0 ; si sz est inférieur, le fichier est simplement tronqué.

Avertissement : cette fonction peut échouer si le fichier n'existe pas.

Il s'agit d'une fonction surchargée.

Voir aussi resize().

void QFile::setFileName(const QString &name)

Définit l'name e du fichier. Le nom peut être un nom sans chemin, un chemin relatif ou un chemin absolu.

N'appelez pas cette fonction si le fichier est déjà ouvert.

Si le nom du fichier ne comporte pas de chemin d'accès ou comporte un chemin d'accès relatif, le chemin utilisé sera celui du répertoire courant de l'application au moment de l'appel à la fonction open().

Exemple :

QFile file;
QDir::setCurrent("/tmp");
file.setFileName("readme.txt");
QDir::setCurrent("/home");
file.open(QIODevice::ReadOnly);      // opens "/home/readme.txt" under Unix

Notez que le séparateur de répertoires « / » fonctionne sur tous les systèmes d’exploitation pris en charge par Qt.

Voir également fileName(), QFileInfo et QDir.

[since 6.0] void QFile::setFileName(const std::filesystem::path &name)

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.0.

[override virtual] bool QFile::setPermissions(QFileDevice::Permissions permissions)

Réimplémente : QFileDevice::setPermissions(autorisations QFileDevice::Permissions).

Définit les droits d'accès du fichier selon les permissions spécifiées. Renvoie true en cas de succès, ou false si les droits d'accès ne peuvent pas être modifiés.

Avertissement : cette fonction ne manipule pas les listes de contrôle d'accès (ACL), ce qui peut limiter son efficacité.

Voir également permissions() et setFileName().

[static] bool QFile::setPermissions(const QString &fileName, QFileDevice::Permissions permissions)

Définit les droits d'accès du fichier « fileName » sur « permissions ».

Il s'agit d'une fonction surchargée.

[static, since 6.0] bool QFile::setPermissions(const std::filesystem::path &filename, QFileDevice::Permissions permissionSpec)

Il s'agit d'une fonction surchargée.

Cette fonction a été introduite dans Qt 6.0.

[override virtual] qint64 QFile::size() const

Réimplémente : QFileDevice::size() const.

[static, since 6.9] bool QFile::supportsMoveToTrash()

Renvoie « true » si Qt prend en charge le déplacement de fichiers vers la corbeille (recycle bin) du système d'exploitation actuel à l'aide de la fonction ` moveToTrash()`, et « false » dans le cas contraire. Notez que le fait que cette fonction renvoie « true » n'implique pas que la fonction ` moveToTrash()` aboutira. En particulier, cette fonction ne vérifie pas si l'utilisateur a désactivé cette fonctionnalité dans ses paramètres.

Cette fonction a été introduite dans Qt 6.9.

Voir également moveToTrash().

[static] QString QFile::symLinkTarget(const QString &fileName)

Renvoie le chemin absolu du fichier ou du répertoire auquel renvoie le lien symbolique (ou le raccourci sous Windows) spécifié par ` fileName`, ou renvoie une chaîne vide si ` fileName ` ne correspond pas à un lien symbolique.

Ce nom ne représente pas nécessairement un fichier existant ; il s'agit uniquement d'une chaîne de caractères. La fonction QFile::exists() renvoie true si le lien symbolique pointe vers un fichier existant.

QString QFile::symLinkTarget() const

Renvoie le chemin absolu du fichier ou du répertoire vers lequel pointe un lien symbolique (ou un raccourci sous Windows), ou une chaîne vide si l'objet n'est pas un lien symbolique.

Ce nom ne représente pas nécessairement un fichier existant ; il s'agit uniquement d'une chaîne de caractères. La fonction ` QFile::exists()` renvoie ` true ` si le lien symbolique pointe vers un fichier existant.

Il s’agit d’une fonction surchargée.

Voir également fileName() et setFileName().

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