Problème de chaine :S

sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 - 15 nov. 2003 à 15:14
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 - 15 nov. 2003 à 16:39
Bonjour à tous !

J'ai créé une fonction pour vider un dossier de ces fichiers, suivant différents paramètres.

Le problème, c'estq ue ça marche pour un petit nombre de fichiers / dossier, mais dès que el nombre est trop élevé, j'ai des chaine qui se mélange, enfin ça marche plus :(

Si quelqu'un pouvait me dire ce qui va pas, je trouve pas :(

Merci d'avance !

Voici le code :
BOOL ViderDossier(char *szChemin, int iOpt, BOOL FirstPass)
{

char *szTmp = NULL;
char *szCheminTmp;
WIN32_FIND_DATA Data;
HANDLE Search;
DWORD Attrs = 0;
BOOL DelParent = TRUE;

if (FirstPass) {

switch (iOpt)
{

case 0:
case 1:
case 2:
DelParent = TRUE;
break;
case 3:
case 4:
DelParent = FALSE;
break;

}

}

szCheminTmp = (char *) malloc(strlen(szChemin)+1);
strcpy(szCheminTmp, szChemin);

printf("%s\n", szCheminTmp);

if (szCheminTmp[strlen(szCheminTmp)] != '\\')
{
szCheminTmp[strlen(szCheminTmp)] = '\\';
szCheminTmp[strlen(szChemin) + 1] = 0;

}

/* Pour un minimum de sécurité, on vérifie que le chemin est différent de x:\ */

if (strlen(szCheminTmp) <= 3)
return FALSE;

szTmp = (char *) malloc(MAX_PATH);
szTmp[0] = 0;
strcpy(szTmp, szCheminTmp);
strcat(szTmp, "*.*");

Search = FindFirstFile(szTmp, &Data);

if (Search == INVALID_HANDLE_VALUE)
return FALSE;

do
{

//printf("Attribue : %d - %s\n", (Data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY), szTmp);

  if ((Data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
  {
  
  /* C'est un fichier ! */
  
  if (DelParent)
  {
  
  /* On peut supprimer les fichier */
  
if ((strcmp(Data.cFileName, ".") != 0) && (strcmp(Data.cFileName, "..") != 0))
 {
  
  
  szTmp = (char *) malloc(MAX_PATH);
 
  strcpy(szTmp, szCheminTmp);
  strcat(szTmp, Data.cFileName);
  
      Attrs = GetFileAttributes(szTmp);
      
      if ((Attrs & FILE_ATTRIBUTE_READONLY) != 0)
      {
      
      /* Lecture seule */
      
                SetFileAttributes(szTmp, (Attrs - FILE_ATTRIBUTE_READONLY));
                
  	  }
      
  	          /* On supprime les fichiers */
        
  DeleteFile(szTmp);
  
  free(szTmp);
  
}
  
}

  }
  
  /* A partir d'ici, tous les fichiers sont supprimés du dossier ! */
  
 if (iOpt == 0) /* On ne continue pas */
 	continue;
  
if ((Data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
{

/* C'est un dossier */

if ((strcmp(Data.cFileName, ".") != 0) && (strcmp(Data.cFileName, "..") != 0))
{

/* On peut vider ce dossier */

  		szTmp = (char *) malloc(MAX_PATH);

strcpy(szTmp, szCheminTmp);
strcat(szTmp, Data.cFileName);

printf("Chemin du dossier : %s\n", szTmp);

ViderDossier(szTmp, iOpt, FALSE);

/* Si iOpt est différent de 3 et de 1, on peut supprimer le dossier vidé */

if ((iOpt != 3) && (iOpt != 1))
{

//szTmp[strlen(szTmp)-1] = 0;

Attrs = GetFileAttributes(szTmp);
      
      if ((Attrs & FILE_ATTRIBUTE_READONLY) != 0)
      {
      
      /* Lecture seule */
      
                SetFileAttributes(szTmp, (Attrs - FILE_ATTRIBUTE_READONLY));
                
  	  }
  	  
RemoveDirectory(szTmp);

}

}

}

} 
   while (0 != FindNextFile(Search, &Data));
   
   FindClose(Search);
   
return TRUE;

}


Merci d'avance

\* -- Seb [[mailto:seb_winux@hotmail.com Mail]] [Web] -- */

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 nov. 2003 à 15:22
Regarde dans mes source, il y en a une qui liste tous les disques, au lieu de lister tu supprimeras.
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
15 nov. 2003 à 16:39
Merci beaucoup, grâce à ton code j'ai réussi :) Merci !!!

\* -- Seb [[mailto:seb_winux@hotmail.com Mail]] [Web] -- */
0
Rejoignez-nous