tu peux corriger ton titre de sujet histoire qu’on sache de quoi il retourne? (je veux dire si tout le monde écrivait “aide pour un prog en C”, on s’y retrouverait pas)
utilise la balise [!code] et [/code] (sans le ‘!’) pour encadrer ton code.
Sinon à priori, la suppression de dossier ça doit donner ça :
int rmdir_recursive(const char* directoryPath) {
char buffer[1024];
char* file = NULL;
struct ??? dir = opendir(directoryPath);
// gna gna gna gna (à corriger, je connais pas en C)
// pour chaque fichier
while (NULL != (file = readdir(dir))) {
// si file n'est pas un chemin complet
snprintf(buffer, 1024, "%s/%s", directoryPath, file);
if (IS_DIR(file)) {
rmdir_recursive(file); // on le rend suppressible
}
unlink(file); // on supprime
free(file); // si nextdirentry renvoie un truc alloué.
}
}
ouais. Et t’apprendras à utiliser gdb et tu verras où est ton erreur hein. Car bon, c’est bien de se baser sur le code des autres, mais faut le faire jusqu’au bout : ta segfault est tout ce qu’il y a de plus normale.
C’est pas char* buffer mais char buffer[1024] : la différence est notable, dans un cas c’est un pointeur vers n’importe quoi, dans l’autre un tableau de char.
je sais que c’est tjrs mieu de se faire son propre code, mais le c’est une partie pour un gestionnaire de fichier (que je doit faire comme mivroprojet), ca fait 1 mois que je suis sur el projet et cette fonction est une des dernieres que je dois faire et ca fait 4 jours que je rame comme un ouf a essayer nombre de code qui fonctionne pas.
devant rendre mon projet mardi soir, je commence a flippe run peu.
Tu te rends compte de la remarque stupide que tu dis là ?
Bref. Non, strcmp(a, b) == vérifie que deux chaînes à zéro terminal sont égales. Renvoie 0 si a vaut b, -1 si a avant b, et 1 si a après b?.
Fait des affichages pour voir ce que tu supprimes réellement/ce que tu lis, mais je t’assure que tel quel ton algorithme est faux : tu supprimes tout les fichiers tels que ‘.’ et ‘…’ soient avant le nom du fichier.
Essaye en créant un dossier nommé “,a” car strcmp(’.’, ‘,a’) = 1, de même strcmp(’…’, ‘,a’) = 1. Donc :
ben ecoute, comme je l’ai dit plus haut avec if(strcmp(".",(ep->d_name))==-1 && strcmp("…",(ep->d_name))==-1) sur fedora, ca fonctionne, quelque soit les noms des fichiers ou dossiers, le dossier en argument de la fonction est supprimé.
Par contre, des que je suis passer sur le linux de mon iut (slackware) la ca marche pu et c’est effectivement !=0 qui faut mettre.