Problème de chaine :S

Messages postés
246
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
5 août 2004
- - Dernière réponse : 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] -- */
Afficher la suite 

2 réponses

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

\* -- Seb [[mailto:seb_winux@hotmail.com Mail]] [Web] -- */
Commenter la réponse de sebastienbro