Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SUPPRESSION RÉCURSIVE DE FICHIERS (DELTREE)


Information sur la source

Description

Ce code permet de supprimer tous les fichiers d'un répertoire (placé en paramètre) sans supprimer celui-ci. Très pratique lorsque l'on veut supprimer les fichiers d'un dossier système qui ne peut pas être supprimé. La commande deltree réalisait cette tâche avant.
 

Source

  • //fonction permettant la suppression du contenu d'un répertoire sans le supprimer
  • void DeleteAll(TCHAR * repertoire)
  • {
  • TCHAR Path[MAX_PATH] ;
  • _tcscpy(Path, repertoire) ;
  • _tcscat(Path, TEXT("\\*")) ;
  • TCHAR dossier[MAX_PATH] ;
  • _tcscpy(dossier, repertoire) ;
  • _tcscat(dossier, TEXT("\\")) ;
  • WIN32_FIND_DATA wfd;
  • HANDLE hfl = FindFirstFile(Path, &wfd); // Recherche du premier fichier du répertoire
  • if(hfl != INVALID_HANDLE_VALUE)
  • {
  • _tcscat(dossier, wfd.cFileName) ;
  • if (wfd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) // Si il s'agit d'un dossier
  • {
  • DeleteAll(dossier) ; // Suppression récursive des dossiers
  • RemoveDirectory(dossier) ; // Suppression du dossier
  • }
  • else
  • {
  • DeleteFile(dossier); // Suppression du fichier
  • }
  • while(FindNextFile(hfl, &wfd)) // Tant qu'il y a de nouveaux fichiers
  • {
  • _tcscpy(dossier, repertoire) ;
  • _tcscat(dossier, TEXT("\\")) ;
  • _tcscat(dossier, wfd.cFileName) ;
  • if (wfd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) // Si il s'agit d'un dossier
  • {
  • DeleteAll(dossier) ; // Suppression récursive des dossiers
  • RemoveDirectory(dossier) ; // Suppression du dossier
  • }
  • else
  • {
  • DeleteFile(dossier); // Suppression du fichier
  • }
  • }
  • FindClose(hfl); // Fermeture du dossier de recherche
  • }
  • }
//fonction permettant la suppression du contenu d'un répertoire sans le supprimer
void DeleteAll(TCHAR * repertoire)
{
 TCHAR Path[MAX_PATH] ;
 _tcscpy(Path, repertoire) ; 
 _tcscat(Path, TEXT("\\*")) ; 
 TCHAR dossier[MAX_PATH] ;
 _tcscpy(dossier, repertoire) ; 
 _tcscat(dossier, TEXT("\\")) ;
 WIN32_FIND_DATA wfd;
 HANDLE hfl = FindFirstFile(Path, &wfd); // Recherche du premier fichier du répertoire
 if(hfl != INVALID_HANDLE_VALUE) 
 {
	_tcscat(dossier, wfd.cFileName) ;
    if (wfd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) // Si il s'agit d'un dossier
	{
	   DeleteAll(dossier) ; // Suppression récursive des dossiers
	   RemoveDirectory(dossier) ; // Suppression du dossier
	}
	else
	{
	   DeleteFile(dossier); // Suppression du fichier
	}
    while(FindNextFile(hfl, &wfd)) // Tant qu'il y a de nouveaux fichiers
	{
		_tcscpy(dossier, repertoire) ;
		_tcscat(dossier, TEXT("\\")) ;
        _tcscat(dossier, wfd.cFileName) ;
		if (wfd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) // Si il s'agit d'un dossier
		{
		   DeleteAll(dossier) ; // Suppression récursive des dossiers
	       RemoveDirectory(dossier) ; // Suppression du dossier
		}
		else
		{
		   DeleteFile(dossier); // Suppression du fichier
		}
	}
    FindClose(hfl); // Fermeture du dossier de recherche
 }
}

Commentaires et avis

signaler à un administrateur
Commentaire de rrk275 le 11/06/2007 10:55:40

il faut un peu plus factoriser le code :


//fonction permettant la suppression du contenu d'un répertoire sans le supprimer
void DeleteAll(TCHAR * repertoire)
{
TCHAR Path[MAX_PATH] ;
_tcscpy(Path, repertoire) ;
_tcscat(Path, TEXT("\\*")) ;
TCHAR dossier[MAX_PATH] ;
WIN32_FIND_DATA wfd;
HANDLE hfl = FindFirstFile(Path, &wfd); // Recherche du premier fichier du répertoire
if(hfl != INVALID_HANDLE_VALUE)
{
do
{
_tcscpy(dossier, repertoire) ;
_tcscat(dossier, TEXT("\\")) ;
_tcscat(dossier, wfd.cFileName) ;
if (wfd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) // Si il s'agit d'un dossier
{
  DeleteAll(dossier) ; // Suppression récursive des dossiers
  RemoveDirectory(dossier) ; // Suppression du dossier
}
else
{
  DeleteFile(dossier); // Suppression du fichier
}
}
while(FindNextFile(hfl, &wfd)); // Tant qu'il y a de nouveaux fichiers
FindClose(hfl); // Fermeture du dossier de recherche
}
}

apres je ne suis pas sous win mais ne pourrais tu pas garder qu'un seul des deux buffers ?

signaler à un administrateur
Commentaire de jujuboss le 30/03/2009 11:51:08

Bonjour,

J'ai tester la fonction sur un dossier C:\doss\ qui contient un fichier test.txt
et lorsque je lui done C:\doss ( comme la fonction rajoute le \* )

Ca boucle infini et la variable dossier vaut :

"C:\doss\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\."  etc ..

Pourtant il n'y a qu'un seul fichier dans ce dossier :s

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

supprimer tout les fichiers d'un répertoire [ par AoD ] je recherche une fonction qui permet de supprimer tout les fichiers d'un répertoire.merci de vite me répondre Traitement de fichiers et répertoires sous différents OS [ par kawasaki31 ] Salut,J'ai cherché un peu partout sans trouver.Je cherche si des classes C++ existe pour copier, déplacer, supprimer un fichier, puis créer un réperto [dev-cpp] Dossiers et fichiers [ par zippro4012 ] Comment &#233;num&#233;rer les fichiers d'un dossier ? Comment &#233;num&#233;rer les dossiers d'un dossier ? Enfin, comment savoir si un fichier exis private.h et private.rc [ par Scientophage ] J'ai un gros problème : à chaque compilation, mon compilateur (DEV Cpp 4.9.9.0) me crée deux fichiers : *private.h et *private.rc Cela a pour effet de 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 Selection de fichiers/dossiers (WinApi ) [ par javert ] Salut,je cherche comment ouvrir une fenetre avec la WinApi permettant de parcourir l'arborescence pour selectionner un fichier ou un dossier.Je sais q explorateur windows [ par m.beber ] Salut à tous,Je vous écrits car j'ai un petit problème pour programmerune application de type "explorateur windows".Je travaille sous borland C++ Buil Algo de compression [ par PsyCaDi ] Bonjour,J'ai besoin de faire un petit prog qui me permettrait de compresser des répertoires contenant un maximum de 100 000 fichiers. J'ai des fichier Supprimer des fichiers [ par perig ] Bonjour,   <p class="MsoNormal" st Droit sur les fichiers et les dossiers [ par kanprog ] Salut. Quelqu'un peux t-il m'aider? J'aimerais pouvoir changer les droit d'accès par defaut d'un fichier ou d'un repertoire depuis un programme en c++


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,952 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.