Compter les fichiers d un repertoire

MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 - 21 janv. 2004 à 15:24
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 - 23 janv. 2004 à 18:35
procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode);
var
Info: TSearchRec;
Nombre: Integer;
begin
nombre:= 0;
if FindFirst(ShellTreeView1.Path, faAnyFile, Info)= 0
then
begin
Nombre:= Nombre+1;
while FindNext(Info)= 0
do Nombre:= Nombre+1;
FindClose(Info);
end;
ShowMessage(inttostr(nombre));
end;

vous l aurez sans doute compris, je veux que lorsque je change de dossier, ce code me renvoie le nombre de fichiers presents dans le nouveau dossier selectionne. avec ce code, il me retourne toujours 1 meme si il n y a aucun fichier...
je pense que soit je me plante au niveau du findfirst soit cest pour le comptage...
si quelqu un voit mon erreur... il sait quoi faire !

7 réponses

cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
21 janv. 2004 à 20:32
procedure TForm1.ShellTreeView1Change(Sender: TObject; Node: TTreeNode);
var Nbfiles,
Nbdir : Longint;
TotSize : Int64;
fd : WIN32_FIND_DATA;
sh : Thandle;
rep : String;
begin
rep:=ShellTreeView1.Path+'\*.*';
sh:=findfirstfile(pchar(rep),fd);
nbdir:=0;
nbfiles:=0;
TotSize:=0;
if not(sh=INVALID_HANDLE_VALUE) then
begin
repeat
if (fd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY)=0 then
begin
inc(NbFiles);
TotSize:=totsize+(fd.nFileSizeLow);
end
else if fd.cFileName[0]<>'.' then
inc(nbdir);
until not FindNextFile(sh,fd);
showmessage('Repertoire : '+rep+' '+inttostr(nbfiles)+' Fichiers '+inttostr(nbdir)+' Dir. Utilise '+inttostr(totsize div 1024)+'kb');
end;
windows.findclose(sh);
end;

Bon Coding ....

ManChesTer.
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
22 janv. 2004 à 18:21
merci, mais j aurai prefere seulement qu on me dise ou etait mon erreur, comment m ameliorer sinon? donc si quelqu un pouvait eclairer mes lumieres...
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
22 janv. 2004 à 19:21
Le résultat que tu obtiens est celui de la recherche d'un répertoire du nom indiqué par ShellTreeView1.Path.

Pour obtenir un comptage des fichiers contenus dans un répertoire, il faut indiquer un masque de fichiers, ainsi que l'a fait Manchester :
ShellTreeView1.Path+'\*.*'

Donc, il faut modifier comme suit :
if FindFirst(ShellTreeView1.Path + '\*.*', faAnyFile, Info)
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
22 janv. 2004 à 19:40
ok merci, je comprends.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
22 janv. 2004 à 19:42
je voulais savoir, est ce que ca compte les dossiers? apparement oui mais je suis pas sur...
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
22 janv. 2004 à 22:47
Effectivement, en indiquant faAnyFile, ça compte.

Pour ne pas prendre encompte le répertoire courant et le répertoire parent, il faut indiquer :
faAnyFile - faDirectory

(J'ai vérifié...)
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
23 janv. 2004 à 18:35
merci, j ai essaye avec le "-faDirectory" ca marche nikel, il ne compte que les fichiers...
merci a vous
0
Rejoignez-nous