begin process at 2012 05 27 19:28:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > SUPPRESSION D'UN RÉPERTOIRE

SUPPRESSION D'UN RÉPERTOIRE


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Système Classé sous :c, supprimer, repertoire, force Niveau :Débutant Date de création :23/02/2007 Vu :12 885

Auteur : lebdenat

Ecrire un message privé
Site perso
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

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

Source

  • #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) ;
  • }
#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) ;
}



 Sources du même auteur

Source avec Zip Source avec une capture SUPPRAUTORUN
Source avec Zip REMPLISSEUR DE FORMULAIRE POUR TADOTABLE
Source avec Zip Source avec une capture [C++ BUILDER] C, ODBC, MS ACCESS ET WIN32 : GESTION DE BASES...

 Sources de la même categorie

Source avec Zip Source avec une capture INFORMATION PROCESSEUR (CPUID) par Devils_Tiger
Source avec Zip Source avec une capture LECTURE TEMPÉRATURE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture LECTURE FRÉQUENCE PROCESSEUR par Devils_Tiger
Source avec Zip Source avec une capture UNE LISTE HÉTÉROGÈNE DOUBLEMENT CHAINÉE par pgl10
Source avec Zip Source avec une capture POUR AFFICHER LES CARACTÈRES ACCENTUÉS SOUS WINDOWS EN MODE ... par pgl10

 Sources en rapport avec celle ci

LISTER LES FICHIERS D'UN REPERTOIRE + FILTRES par yvesyves
Source avec Zip Source avec une capture [WIN32] PETIT RÉPERTOIRE TÉLÉPHONIQUE ET AUTRES (GESTION LIS... par uaip
Source avec Zip EXPLORATEUR DE FICHIER par kts_system
Source avec Zip [DEVC++] PROTEGER L'ACCES À UN RÉPERTOIRE par DelphiCool
Source avec Zip CODE DE HUFFMAN par Ricky_MacElroy

Commentaires et avis

Commentaire de deck_bsd le 23/02/2007 16:23:18

Interresant, mais je pense pas que le mettre en source soit vraiment nécessaire. Tu aurai du étoffer le projet. C'est un peu léger.

D'ailleur je ne pense pas que je serai le seul à faire cette réflexion.

Commentaire de BruNews le 23/02/2007 23:16:21 administrateur CS

char *filename = malloc(strlen(dirname) + 1 + strlen(ent->d_name) + 1 + 1);
strcpy(filename, dirname);
strcat(filename, "\\");
strcat(filename, ent->d_name);

Les 2 strcat font des reparcours inutiles.
strcat pour 1 octet ("\\"), c'est un must !!!
char *d = filename, c;
c = dirname;
while(*d = *c) {d++; c++};
*d++ = '\\'; // 1 CYCLE AU LIEU DE LA BOUCLE strcat
c = ent->d_name;
while(*d = *c) {d++; c++};
filename est rempli en 1 seul parcours.

Commentaire de Naloj le 26/02/2007 09:33:42

on peut aussi sortir la concaténation du nom du dossier avec l'antislash de la boucle 'while' car elle est utilisé pour chaque fichier à supprimer. Une source sympatique quand on cherche le truc.

Commentaire de xkamen le 26/02/2007 09:36:23

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

Commentaire de Naloj le 26/02/2007 09:43:08

Qu'est ce que ça veut dire justement "char *d = filename, *c;" svp ? On met la valeur de filename dans c ?

Commentaire de BruNews le 26/02/2007 10:23:53 administrateur CS

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.

Commentaire de xkamen le 28/02/2007 14:09:19

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.

Commentaire de Funto66 le 28/02/2007 20:21:20

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

[/commentaire qui sert à rien]

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

suppression repertoire [ par yserver ] Bonjour et merci de lire mon posteEn faite j'ai 2 questions. - 1 -Est-il possible de supprimer un repertoire contenant des fichiers? Il me semble que supprimer le repertoire cree??? [ par cpierrenet ] salut les amis,je programme une application sous VC++ 06 dans le code je cree un repertoire, le probleme c'est que je n'arrive pas a supprimer le repe supprimer l'extension [ par F0ra ] Bonjour, Je voudrais supprimer uniquement l'extension d'un fichier. Exemple : Char test[64]="C:\\XXX\\WWW\\FFF.txt"; strtok(test, "."); SetWindowText affichage les fichier d'un repertoire sous linux [ par khadoudj09 ] faire un programme C qui affiche le contenu repertoire du disque (liste des fichiers de ce repertoire). le programme doit permetrre le trie le contenu table de hachage [ par cyrina84 ] bonjour à tous, jai une table de hachage chainée: chaque element de la table est lié à une liste chainé.je voudrais savoir pour supprimer un element d Direct Input & retour de force [ par timbaboy ] Bonjour, Voila j'utilise DirectX 9.0 pour piloter le retour de force d'un volant Logitech G25, je peux ainsi appliquer facilement des forces dans un supprimer dans un fichier [ par juju0612 ] donc voila mon programme fais une gestion d'un club de foot!!donc ici c pour supprimer des joueurs.tout marche sauf que j'ai un probleme avec ma fonct fonction supprime tous!! [ par juju0612 ] bonjour à tous!!!voila ma fonction supprimer doit supprimer que le nom que je lui donne mais il supprime tous!!et je ne vois pas pourquoi!!comment res Option manquante [ par ponup ] Désolé Mais j'aurais aimé pouvoir supprimer mon compte (login ponup). Je n'ai trouvé aucun lien pour le faire. peut etre ne s'affiche t'il pas. Mais d creation de repertoire et sous repertoire à partir d'un chemin en c [ par coolsquale ] bonjour à tousje suis en train de programmer un utilitaire d'archivage dans le cadre d'un travail scolaireet j'aimerais savoir s'il y a une commande s


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,546 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales