sebastienbro
Messages postés246Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention 5 août 2004
-
15 nov. 2003 à 15:14
sebastienbro
Messages postés246Date d'inscriptiondimanche 14 avril 2002StatutMembreDerniè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;
}