begin process at 2008 07 19 09:19:44
1 212 728 membres
67 nouveaux aujourd'hui
14 165 membres club

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
 }
}
  • 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 ?

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS