Parsing de dossier, problème avec QDirIterator

Un bug de QT ?

a marqué ce sujet comme résolu.

Bonjour à tous,

Quand je parcours un dossier, et que j'indique s'il s'agit d'un dossier ou d'un fichier, la réponse ne joue pas toujours.

Voici mon code:

1
2
3
4
5
6
QDir dest = QDir("D:/c/dest/");
QDirIterator itDest(dest.absolutePath(), QDirIterator::Subdirectories);

while(itDest.hasNext()){
    qDebug() << itDest.next() << " -- " << " IsFile: " << itDest.fileInfo().isFile() << " -  IsDir: " << itDest.fileInfo().isDir();
}

Et la sortie:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[X] "D:/c/dest/."  --   IsFile:  false  -  IsDir:  false
    "D:/c/dest/.."  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/C++"  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/C++/."  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/C++/.."  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/C++/build-NasController-Desktop_Qt_5_7_0_MinGW_32bit-Debug"  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/C++/build-NasController-Desktop_Qt_5_7_0_MinGW_32bit-Debug/."  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/C++/build-NasController-Desktop_Qt_5_7_0_MinGW_32bit-Debug/.."  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/C++/build-NasController-Desktop_Qt_5_7_0_MinGW_32bit-Debug/icones"  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/C++/build-NasController-Desktop_Qt_5_7_0_MinGW_32bit-Debug/icones/."  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/C++/build-NasController-Desktop_Qt_5_7_0_MinGW_32bit-Debug/icones/.."  --   IsFile:  false  -  IsDir:  true
[X] "D:/c/dest/C++/build-NasController-Desktop_Qt_5_7_0_MinGW_32bit-Debug/icones/darkNas.png"  --   IsFile:  false  -  IsDir:  true
[X] "D:/c/dest/Web"  --   IsFile:  true  -  IsDir:  false
    "D:/c/dest/Web/."  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/Web/.."  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/Web/winxaito.com"  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/Web/winxaito.com/."  --   IsFile:  false  -  IsDir:  true
    "D:/c/dest/Web/winxaito.com/.."  --   IsFile:  false  -  IsDir:  true
[X] "D:/c/dest/Web/winxaito.com/database.php"  --   IsFile:  false  -  IsDir:  true

Pour résumer cette sortie, j'ai fais un script qui est sensé parcourir tout les fichiers, les comparés et en supprimer certain. Pour commencer, je lui ai demander de me supprimer tous les fichiers, et j'ai ensuite refais une boucle pour supprimer tous les dossiers, mais bien entendu ça ne fonctionne pas puisque certain fichier son considéré comme des dossiers.

Savez-vous s'il s'agit d'un bug de QT ? Ou d'une erreur de ma part ?

En vous remerciant, WinXaito.

Effectivement, il semblerait que ce soit dû à ça. Et la raison pour la quelle ça ne fonctionnait pas provient surement (Il faut que j'essaye) du fait que le fichier que je voulais supprimer était en lecture-seule.

Par contre j'ai un autre soucis plus problématique. J'ai un fichier qui n'est tout bonnement pas vu. J'ai beau faire la boucle qui me liste tout, le fichier est invisible.

Pourtant dans le navigateur je le vois, mais il y a une chose étrange, sa taille sur le disque fait 0 octect et sa taille réel 213 octects, comment est-ce possible ? Et surtout comment remédier à cela ?

J'ai trouvé, en fait itDest.next(); doit être appelé en tout premier, ce que je trouve bien étrange au passage.

– Edit –

Par contre j'ai un autre problème, et j'en profite droit pour le dire ici, j'aimerais parcourir tous les dossiers, et comparé s'il existe dans un dossier source, et s'il n'existe pas, le supprimer.

Ce que j'ai fais fonctionne, mais des fois il commence pas par les derniers sous-dossiers, donc il détecte qu'un dossier existe et il ne le supprimer pas, donc je dois lancer deux fois l'opération pour tous réussir à les supprimer. Est-ce que mon charabia est compréhensible ? :p

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte