Fonction capricieuse
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour les amis,
je viens de pondre une fonction pour supprimer le contenue d'un dossier passé en paramètre.
mais elle refuse de fonctionner, je comprend pas pourquoi ... mes vérification ne retourne pas d'erreur et tout compile a merveille, pourtant rien ne change dans mon dossier a supprimé .
voila ma fonction, si vous avez des idée d'optimisation je suis preneur.
ma fonction 'pathbuild' ce contente de rajouté le nom du dossier trouvé a la fin du chemin passer en paramétre. et elle est correcte elle.
je viens de pondre une fonction pour supprimer le contenue d'un dossier passé en paramètre.
mais elle refuse de fonctionner, je comprend pas pourquoi ... mes vérification ne retourne pas d'erreur et tout compile a merveille, pourtant rien ne change dans mon dossier a supprimé .
voila ma fonction, si vous avez des idée d'optimisation je suis preneur.
void Para::DeleteFolder(std::string path) { struct dirent* file = NULL; DIR* rep = NULL; rep = opendir(path.c_str()); while ((file = readdir(rep)) != NULL && rep) { if (strcmp(file->d_name, "..") != 0 && strcmp(file->d_name, ".") != 0) { if (isDir(file->d_name) == false && rmdir(file->d_name) == -1) DeleteFolder(PathBuild(path, file->d_name)); else if (remove(file->d_name) == -1) error(14); } } if (!rep) error(3); if (closedir(rep) == -1) error(4); }
ma fonction 'pathbuild' ce contente de rajouté le nom du dossier trouvé a la fin du chemin passer en paramétre. et elle est correcte elle.
A voir également:
- Fonction capricieuse
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
1 réponse
Bonjour,
Je suis un peu rouillé en C++ mais je ne comprends pas ceci :
Pourquoi faire un
De plus je pense qu'il faudrait que tu fasses le
Je n'ai pas testé :
Je suis un peu rouillé en C++ mais je ne comprends pas ceci :
if (isDir(file->d_name) == false && rmdir(file->d_name) == -1) DeleteFolder(PathBuild(path, file->d_name));
Pourquoi faire un
rmdiret un
DeleteFoldersi
isDirrenvoie false ?
De plus je pense qu'il faudrait que tu fasses le
rmdiraprès avoir supprimé tout les
opendiren cours, c'est à dire après la boucle, pas pendant.
Je n'ai pas testé :
void Para::DeleteFolder(std::string path) { DIR* rep = opendir(path.c_str()); if (!rep) error(3); struct dirent* file = NULL; while ((file = readdir(rep)) != NULL) { if (strcmp(file->d_name, "..") == 0 || strcmp(file->d_name, ".") == 0) continue; if (isDir(file->d_name)) DeleteFolder(PathBuild(path, file->d_name)); else if (remove(file->d_name) == -1) error(14); } if (closedir(rep) == -1) error(4); if (rmdir(rep) == -1) error(?); }
la fonction que tu ma fait me semble pas mal, sauf sur un point.
mon dossier contient des sous dossier que je veut également voir disparaître.
si je suis ta logique seul le dossier qui contient l’ensemble va subir une tentative de suppression, qui normalement devrais échouer étant donner que ce dossier "qui contient encore d'autre dossier" n'est pas vide .
et la est mon problème justement ...
sauf si tu me dit que le compilo ne considère pas un dossier comme du contenue, et que si tout ses dernier ne stocke plus de fichiers le dossier mère peut être supprimé sans problème. mais j'en doute .
Non, car on appelle récursivement DeleteFolder dans ce if (ce qui était déjà le cas dans ton code), donc on va d'abord supprimer les sous-dossier avant de continuer la suppression du répertoire en cours, que l'on ne supprime qu'à la fin, lorsqu'il est complètement vide (sauf erreur de suppression avant).
je teste cela de suite.