Suppression d'un répertoire

0/5 (8 avis)

Snippet vu 18 782 fois - Téléchargée 23 fois

Contenu du snippet

La fonction force_rmdir() force la suppression d'un répertoire, même s'il contient d'autres répertoires et des fichiers.

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <io.h>
#include <sys/stat.h>

// avec la fonction "force_rmfile()" pour supprimer un fichier
void force_rmfile(char *filename)
{
	FILE *f = fopen(filename, "r") ;
	if (! f)
		return ;
	fclose(f) ;
	chmod(filename, S_IWRITE) ;
	remove(filename) ;
}    

// Fonction "force_rmdir()" pour supprimer un repertoire
void force_rmdir(char *dirname)
{
	DIR *dir;
	struct dirent *ent;
	dir = opendir(dirname) ;
	if (! dir)
	{
		force_rmfile(dirname) ;
		return ;
	} 
	while((ent = readdir(dir)) != NULL)
	{
		if (ent->d_name[0] == '.')
		continue ;
		char *filename = malloc(strlen(dirname) + 1
			+ strlen(ent->d_name) + 1 
			+ 1) ;
		strcpy(filename, dirname) ;
		strcat(filename, "\\") ;
		strcat(filename, ent->d_name) ;
		force_rmdir(filename) ;
		free(filename) ;
	}
	rmdir(dirname) ;
}

A voir également

Ajouter un commentaire Commentaires
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
28 févr. 2007 à 20:21
Quitte à faire le pinailleur comme ça se fait depuis le début des commentaires, "*c est un pointeur" -> c'est plutôt "c est un pointeur" :p

qui sert à rien
xkamen Messages postés 26 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 31 janvier 2008
28 févr. 2007 à 14:09
Oups,
Je ne m'étais pas relu. Ca m'apprendra :) C'est vrai, *c est un pointeur, qui en l'occurence va servir ici à pointer vers l'adresse mémoire d'une chaine de caractères.
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
26 févr. 2007 à 10:23
ah sur que c'est : char *c;
dur dur de taper direct ici sans se relire...

"c ne serait pas une chaine de caractère"
sérieux ça ne veut rien dire.
*c est un pointeur, c'est à dire une adresse mémoire.
Naloj Messages postés 6 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 26 février 2007
26 févr. 2007 à 09:43
Qu'est ce que ça veut dire justement "char *d = filename, *c;" svp ? On met la valeur de filename dans c ?
xkamen Messages postés 26 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 31 janvier 2008
26 févr. 2007 à 09:36
Bonjour,

BruNews > Tu as écris la chose suivante:
char *d = filename, c;

Ce ne serait pas plutot :
char *d = filename, *c;
Car sinon, la variable c ne serait pas une chaine de caractère :D
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.