Récursive *.bak

Résolu
bibi262 Messages postés 9 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 4 décembre 2006 - 8 oct. 2006 à 17:06
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 - 13 oct. 2006 à 11:17
Bonjour,

Je cherchais depuis un bout comment faire pour supprimer les fichiers qui sont dans les sous-dossiers, j'ai finit par trouver un code qui marche superbement bien :

procedure Scan( NomDossier : string );
var
 hFound : Integer;
 sFileData : TSearchRec;
begin
 NomDossier := IncludeTrailingPathDelimiter( NomDossier );
 hFound := FindFirst( NomDossier + '*.*', faAnyFile, sFileData);
 if ( hFound = 0 ) then
 begin
  repeat
  if ( ( sFileData.Name <> '.' ) and ( sFileData.Name <> '..' ) ) then
  begin
   if ( ( sFileData.Attr and faDirectory ) <> faDirectory ) then
    begin
     ShowMessage('File name = '+sFileData.Name);
     ShowMessage('File size = '+IntToStr(sFileData.Size));
    end
   else
   Scan( NomDossier + sFileData.Name);
  end;
 until ( FindNext( sFileData ) <> 0 );
end;
SysUtils.FindClose( sFileData );
end;

J'en avais besoin car je devais supprimer tout les fichiers *.bak présent dans le disque dur. Alors je modifie :
hFound := FindFirst( NomDossier + '*.*', faAnyFile, sFileData);
pour
hFound := FindFirst( NomDossier + '*.bak', faAnyFile, sFileData);

Mais ça ne marche pas, si je remplace par *.bak, la fonction sous-dossier ne fonctionnera plus. Je ne comprends pas pourquoi et j'esasie de comprendre mais sans résultat.

Quelqu'un aurait une idée ?

Merci d'avance,
bibi262

3 réponses

Emandhal Messages postés 194 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 10 octobre 2006 3
8 oct. 2006 à 20:46
u,

C'est parce que tu n'a pas de répertoire avec une extension.bak.

Il te faut analyser tous les fichiers et dossiers avec *.*, et dans "if ( ( sFileData.Attr and faDirectory ) <> faDirectory ) then" il te faut vérifier l'extension et si c'est .bak, suppr le fichier.

Tout problème a sa solution... Mais en général, celle que l'on trouve n'est jamais la bonne...
3
bibi262 Messages postés 9 Date d'inscription vendredi 14 janvier 2005 Statut Membre Dernière intervention 4 décembre 2006
8 oct. 2006 à 22:22
Merci beaucoup :D
0
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
13 oct. 2006 à 11:17
Hé mais c'est mon code çà ! :-) Content en tout cas que ma source serve à quelque chose !

Sinon oui le masque marche pour tout les types de fichier (donc dossier), il faut donc bien ajouter une condition sur le nom de fichier dans la boucle !

Bon Code !

<!-- blocPrincipal -->
 /\_/\
( o.o ) ~ ElGuevel ~
 > ^ <
0
Rejoignez-nous