Récupérer la taille d'un dossier

Résolu
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 - 22 juil. 2007 à 14:51
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 - 27 juil. 2007 à 14:16
Bonjour !

Je souhaiterais pouvoir récupérer la taille en nombre de fichiers et en octets d'un dossier sans passer par Findfirst, FindNext et FindClose (car trop lent pour de gros dossiers).

Windows y arrive très rapidement en témoigne ce que l'on voit en faisant Clic droit/Propriétés.

Merci d'avance !

SISI231

8 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
23 juil. 2007 à 13:51
hello,

j'ai mis la main sur ça:
http://msdn2.microsoft.com/en-us/library/ms630709.aspx
mais c'est pour du script VB. :-\

sinon, questions stupide:
As-tu essayer de faire une applic console qui te retourne la taille du dossier en utilisant findnext?
As-tu comparer la vitesse de cette applic avec celle de la fenetre propriete de win?
Quel est la différence (pour un très gros dossier)?

sinon, il me semble qu'il n'y a pas de moyen d'avoir directement la taille d'un dossier en NTFS/FAT du à la nature du FS. (rappelons que les dossier n'exisent pas réelement sur ces FS. seulement les fichiers existent.) Mais je ne mettrais pas ma main au feu...

A+

Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
27 juil. 2007 à 13:52
Salut,

bon je vais peut être m'attirer les foudres des puristes ... mais bon
je vous la donne quand même ...

Voici donc un exemple d'utilisation du FileSystemObject bien connu  des VB iste

Uses ComObj; { pour CreateOleObject}
{Cette partie sert uniquement à formater le résultat au choix :
  en Octet, KiloOctet, MegaOctet, GigaOctet, TeraOctet
La fonction SizeToStr est largement inspirée d'un Snippet de F0xi :}
http://www.codyx.org/snippet_convertir-nombre-taille-ko-mo-go_60.aspx
Type
  TSizeFormat = (sfByte, sfKByte, sfMByte, sfGByte, sfTByte);

  TSizeData = Record
    Precision : Byte;
    Units     : String[6];
    Value     : Int64;
  End;

function SizeToStr(const Size : int64; SizeFormat : TSizeFormat) : string;
Const
  SizeFormatName : Array[TSizeFormat] Of TSizeData =
  ((Precision:0; Units:'Octets'; Value:$1),
   (Precision:2; Units:'Ko';     Value:$400),
   (Precision:2; Units:'Mo';     Value:$100000),
   (Precision:2; Units:'Go';     Value:$40000000),
   (Precision:2; Units:'To';     Value:$10000000000));
begin
  With SizeFormatName[SizeFormat] do
    Result := Format('%.*n %s', [Precision, Size/Value, Units]);
End ;
<hr size ="2" width= "100%" /> {Voici le code qui se charge de récupérer la taille du dossier "filespec"}
function ShowFolderSize(Const filespec : String): String;
var FSO, F : Variant;
Begin
   FSO : = CreateOleObject('Scripting.FileSystemObject');
   F := FSO.GetFolder(filespec);
   Result := Format('La taille du répertoire >> %s'#13#10'est de : %s',
     [F.Path, SizeToStr(F.Size, sfGByte)]);
   FSO := Unassigned;
   F   := Unassigned;
End ;
<hr size ="2" width= "100%" /> {et son utilisation}
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption : = ShowFolderSize('e:\program files');
end;

Voilà rien de plus simple ... il y existe, bien sur, d'autres possibilitées ...
pour les plus curieux il y a la MSDN
 
@+
Cirec

3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
22 juil. 2007 à 19:13
Bonsoir

Sans FindFirst FindNext, FindClose !!! Je ne crois pas que cela soit facilement réalisable.

Ensuite tout dépend de ce que tu veux récupérer :
  la taille des fichiers (taille logique)
  la taille totale occupée (taille physique).

N.B. Et que fais tu, dans les cas suivants :
  les raccourcis : comptabilisés en tant que fichiers appartenant au répertoire ?
  les fichiers compressés : Taille du fichier ou de son contenu ?
  etc...

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
23 juil. 2007 à 11:36
Salut !

Je ne vois pas franchement d'autre moyen....

"Windows y arrive très rapidement en témoigne ce que l'on voit en faisant Clic droit/Propriétés."
=> Essaye avec ton dossier Windows ou Program Files, Tu verras, le mien met une bonne minute à tout compabiliser.
0

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

Posez votre question
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 5
23 juil. 2007 à 19:12
Tant pis merci quand même je laisse tomber !

SISI231
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
27 juil. 2007 à 14:02
OK Cirec ta solution fonctionne parfaitement (à part qu'il ne faut pas mettre la racine d'un lecteur ni d'antislash après le nom du dossier).

Mais elle n'est pas plus rapide que la bonne vielle méthode Find(First|Next|Close) donc je ne sais pas si elle va intéresser sisi231.
Pour info, elle a mis 5 sec à lister un dossier de 1,8 Go, mais si on l'exécute une deuxième fois avec le même dossier, elle va bien plus vite. Sûrement une histoire de cache quelque part.

A+
Flo
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
27 juil. 2007 à 14:12
Oui c'est vrai ...
mais je n'ai jamais dit qu'elle était plus rapide qu'un FindFirst/Next

Sinon si tu ouvres le dossier avant avec l'explorer et tu fait "Propriétés"
et ensuite dans l'application Delphi le résultat est également plus rapide

et tu peux même changer de répertoire en cours de route pour y revenir plus tard mais il ne mettrera pas plus de temps pour autant

Donc ... une fois chargé dans la session en cours tous les accès suivant sont beaucoup plus rapide

 
@+
Cirec

0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
27 juil. 2007 à 14:16
Oui, ça je l'avais remarqué !
Je m'étais même bidouillé un programme qui se lançait avec windows et qui parcourait justement tous les fichiers de tous les lecteurs. Ca ralentissait beaucoup le démarrage de windows mais après tout allait plus vite (enfin, c'est relatif ...).

Cela dit, je ne m'en sers plus...

A+
0
Rejoignez-nous