Compter le nombre de dossier vide [Résolu]

Signaler
-
 SystemWin -
Bonjour a tout les developpeurs,

Comment peu t'on compter le nombre de dossier vide dans toute la racine du C:\.

il y a t'il une fonction existante ?

Merci de votre réponse.

5 réponses

Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020
29
Salut,

regarde ceci
et ceci

un mix des deux fera très bien l'affaire


[hr]@+Cirec
[hr]
Messages postés
250
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
2 décembre 2019
5
Salut,
regardes du côté de TSearchRec, FindFirst, FindNext, FindClose, FileAttrs...
pour en sortir une fonction qui regarde si le dossier est vide
@+
Merci yanb de ta réponse,
Exemple avec cette function mais a l'inverse au lieu de compter les fichiers je voudrai compter les répertoires vide

// Procédure pour compter les fichiers
Function CompteFichiers(Chemin:String):Integer;
Var S: TSearchRec;
Begin
Chemin := IncludeTrailingPathDelimiter(Chemin);
Result := 0;
If FindFirst(Chemin + '*.*' ,faAnyFile ,S) = 0 Then
Begin
Repeat
If (S.Name <> '.') And ( s.Name <> '..') Then
Begin
If (S.Attr And faDirectory) <> 0
Then Result := Result+CompteFichiers(Chemin+S.FindData.cFileName)
Else Inc(Result);
End;
// Recherche du suivant
Until FindNext(S)<>0;
FindClose(S);
End;
End;
Merci cirec pour les liens et de ton aide,
Function
Function ListeDossierVide(Chemin: String; List: TStrings): Boolean;
Var
  S: TSearchRec;
Begin
  Chemin := IncludeTrailingPathDelimiter(Chemin);
  Result := true;
  If FindFirst(Chemin + '*.*', faAnyFile, S) = 0 Then
  Begin
    Repeat
      If (S.Name <> '.') And (S.Name <> '..') Then
      Begin
        If (S.Attr And faDirectory) <> 0 then
        begin
          Result := ListeDossierVide(Chemin + S.Name, List);
          if Result = true then
            List.Add(Chemin+ S.Name);
            Application.ProcessMessages;
        end
        else
        begin
          // fichier trouvé => dossier non vide
          Result := false;
        end;
      End;
      // Recherche du suivant
    Until FindNext(S) <> 0;
    FindClose(S);
  End;
End;

-----------------------------------------------------------------
Mon but c'est d'afficher que le dossier vide en fin d'adresse

Exemple :
- C:\MonProgramme\ (Dossier sans fichier qui contien un dossier vide)
- C:\MonProgramme\Projet\ ( Le dossier vide)

Affichage Memo : C:\MonProgramme\Projet\
Sans avoir C:\MonProgramme\
Probléme résolu

Function fListeDossierVide(Chemin: String; List: TStrings): Boolean;
Var
  S: TSearchRec;
Begin
  Chemin := IncludeTrailingPathDelimiter(Chemin);
  Result := true;
  If FindFirst(Chemin + '*.*', faAnyFile, S) = 0 Then
  Begin
    Repeat
      If (S.Name <> '.') And (S.Name <> '..') Then
      Begin
        Result := false;
        If (S.Attr And faDirectory) <> 0 then
        begin
          if fListeDossierVide(Chemin + S.Name, List) then
            List.Add(Chemin + S.Name);
          Application.ProcessMessages;
        end;
      End;
      // Recherche du suivant
    Until FindNext(S) <> 0;
    FindClose(S);
  End;
End;