Suppression récursive de fichiers (deltree)

Contenu du snippet

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 / Exemple :


//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
 }
}

A voir également

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.