Epoch, pour moi ca ne marchait pas parce que mon type était struct dirent...
Au niveau de la concaténation, j'avais aussi une erreur pour les types de variable à concaténer qui n'étaient pas du même type (rep type DIR et fichier type dirent)
Pour y remédier, j'ai ajouté une variable qui contient le chemin
puis j'ai copié puis concaténé le tout dans une autre variable comme on me l'as sugéré (strcpy et strcat)
et j'ai rajouté une allocation de mémoire identique a celle de Epoch
Maintenant, tout marche ^^, mais faut que je rajoute des petit truc... le fait qu'il supprime le répertoire une fois qu'il n'y a plus de fichier (ca doit etre facile à faire)et une option de récurssivité.
Je vous mets le code qui marche tout en vous remerciant ^^:
Pour l'option de suppression du répertoire et la réccusivité je vais le mettre quand j'aurai réussi.
- include <sys/types.h>
- include <dirent.h>
- include <unistd.h>
- include <stdio.h>
- include <stdlib.h>
- include <errno.h>
- include <string.h>
char *chemin_rep="/home/a/b/";
int fd;
char errsv;
char *buffer;
int main(){
DIR *rep;
rep=opendir(chemin_rep);
struct dirent *fichier=NULL;
fichier=(struct dirent*)malloc(sizeof(struct dirent));
buffer=(char*)malloc(sizeof(char*));
while(fichier=readdir(rep)){
if((fichier->d_name[0]!='.')){
strcpy(buffer, chemin_rep);
strcat(buffer, fichier->d_name);
printf("%s",buffer);
if(fd=unlink(buffer)==-1){
printf("%s",buffer);
int errsv = errno;
if (errsv == EACCES){
printf("\nacces ecriture au dossier non autorise");
}
if (errsv == EBUSY){
printf("\nfichier ne peut pas etre detruit par unlink car utilise par le systeme ou par processus");
}
if (errsv == EISDIR){
printf("\nceci est un repertoire");
}
if (errsv == EPERM){
printf("\nnecessite un priviliège");
}
if (errsv == EROFS){
printf("\nfichier en lecture seule");
}
printf("erreur unlink");
}
if(fd=unlink(buffer)==0){
printf("ok");
}
}
}
free(fichier);
closedir(rep);
return (0);
}