Suppression d'un répertoire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 285 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
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3
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
Messages postés
26
Date d'inscription
vendredi 8 avril 2005
Statut
Membre
Dernière intervention
31 janvier 2008

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.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
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.
Messages postés
6
Date d'inscription
mardi 21 septembre 2004
Statut
Membre
Dernière intervention
26 février 2007

Qu'est ce que ça veut dire justement "char *d = filename, *c;" svp ? On met la valeur de filename dans c ?
Messages postés
26
Date d'inscription
vendredi 8 avril 2005
Statut
Membre
Dernière intervention
31 janvier 2008

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.