Vérifier si un dossier existe (et créer des dossiers) dans Qt, C ++


153

Dans Qt, comment vérifier si un dossier donné existe dans le répertoire courant?
S'il n'existe pas, comment puis-je créer un dossier vide?

Réponses:


225

Pour vérifier si un répertoire nommé "Dossier" existe, utilisez:

QDir("Folder").exists();

Pour créer un nouveau dossier nommé "MyFolder", utilisez:

QDir().mkdir("MyFolder");

1
Comment cette réponse se compare-t-elle à la réponse de @ Petrucio? Je ne peux pas déduire cela de la documentation.
Jonas

1
Pourquoi ce n'est pas statique? QDir::exists("absolutepath")etQDir::mkdir(""absolutepath")
yalov

@yalov - car il entrerait en collision avec des non-statiques QDir::mkdir("relative_path"). Impossible d'avoir les deux surcharges.
Tomasz Gandor

5
@ JonasG.Drange Cette réponse ne crée pas de dossiers intermédiaires dans des dossiers complexes / path / structure / with / intermediary /. Ma réponse est objectivement meilleure; la raison pour laquelle il a moins de votes positifs est qu'il a été publié deux ans après celui-ci.
Petrucio

152

Pour vérifier à la fois s'il existe et créer si ce n'est pas le cas, y compris les intermédiaires:

QDir dir("path/to/dir");
if (!dir.exists())
    dir.mkpath(".");

12

Lorsque vous utilisez QDir.mkpath (), il retourne true si le chemin existe déjà, en revanche QDir.mkdir () retourne false si le chemin existe déjà. Donc, en fonction de votre programme, vous devez choisir celui qui vous convient le mieux.

Vous pouvez en savoir plus sur la documentation Qt


0

Si vous avez besoin d'un dossier vide, vous pouvez boucler jusqu'à ce que vous obteniez un dossier vide

    QString folder= QString ("%1").arg(QDateTime::currentMSecsSinceEpoch());
    while(QDir(folder).exists())
    {
         folder= QString ("%1").arg(QDateTime::currentMSecsSinceEpoch());
    }
    QDir().mkdir(folder);

Dans ce cas, vous obtiendrez un nom de dossier avec un numéro.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.