Fonction récursive de destruction d'un repertoire et son sous ensemble

Fonction récursive de destruction d'un repertoire et son sous ensemble - C++ - Programmation

Marsh Posté le 04-04-2006 à 11:50:18    

Bonjour, je suis en train de faire une fonction qui détruit un répertoire récursivement avec l'ensemble des sous repertoires.
malheureusement, même si mon sous répertoire a été vidé, la destruction du repertoire rmdir(szRepertoire); ne marche pas systèmatiquement. Un peu comme si je n'avais pas fermé un objet  :whistle:  :(  
 
Quelqu'un peut t'il m'aider?
 
int DelRepertoire(LPSTR szRepertoire)
{
 HANDLE HFile;
 WIN32_FIND_DATA file_i;
 char sPathRep [MAX_PATH +1];
 char sFileSearch [MAX_PATH +1];
 strcpy(sPathRep, szRepertoire);
 if ( szRepertoire[lstrlen(szRepertoire)-1] != '\\')
    sprintf((LPSTR) sPathRep ,"%s%c", szRepertoire, '\\');
 sprintf((LPSTR) sFileSearch, "%s%s", sPathRep, "*" );
 
 HFile = FindFirstFile(sFileSearch,&file_i);
 if (INVALID_HANDLE_VALUE == HFile) return (0);
 
 
 sprintf(sFileSearch,"%s%s",sPathRep,file_i.cFileName);
 DeleteFile(sFileSearch);
 
 while(FindNextFile(HFile,&file_i) != 0)
 {
  if( !strcmp(file_i.cFileName,"." ) || !strcmp(file_i.cFileName,".." ) )
   continue;
 
  if( (file_i.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
   char * buffer = NULL;
   buffer=(char*) malloc( sizeof(char)*(strlen(sPathRep)+strlen(file_i.cFileName)+1) );
   strcpy(buffer,sPathRep);
   strcat(buffer,file_i.cFileName);
   strcat(buffer,"\\" );
   DelRepertoire(buffer, "*" );
  }
  else
  {
   sprintf(sFileSearch,"%s%s",sPathRep,file_i.cFileName);
   DeleteFile(sFileSearch);
  }
 }
 FindClose(HFile);
 rmdir(szRepertoire);
 return(0);
}

Reply

Marsh Posté le 04-04-2006 à 11:50:18   

Reply

Marsh Posté le 04-04-2006 à 11:51:04    

en utilisant une structure d'arbre ?

Reply

Marsh Posté le 04-04-2006 à 13:09:59    

Pense à désallouer le char *buffer;

Code :
  1. strcat(buffer,"\\";
  2. DelRepertoire(buffer, "*" );
  3. free(buffer);

Es-tu sur du "rmdir" ??
Je  crois que le problème viens de ce que tu ajoute '\' à la fin de la chaîne passée en argument à DelRepertoire.


Message édité par Trap D le 04-04-2006 à 13:17:34
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed