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?

Commutateur
la source

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");
Kyle Lutz
la source
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(".");
Petrucio
la source
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

Vitor Santos
la source
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.

Midhun
la source
-8

Pourquoi utiliser autre chose?

  mkdir(...);
matiasf
la source