IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Taille réelle d'un fichier


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Taille réelle d'un fichier
    Bonjour à toutes et à tous,

    Voila, j'ai une fonction qui permet en principe de connaître la taille d'un fichier.

    Mais cette taille ne semble pas être correcte à la valeur contenue dans le hint lorsque le curseur est posé sur ce fichier.

    La taille de mon fichier affiche 5,72M et 5861Ko

    Le résultat avec la fonction affiche 6001637 octets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function TailleFichier(fichier: string): longint;
    var SearchRec:TSearchRec;
        Resultat:integer;
    begin
      Result:=0;
      Resultat:=FindFirst(fichier, FaAnyFile, SearchRec);
      if Resultat=0 then Result:=SearchRec.Size;
      FindClose(SearchRec);
    end;
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TFTaille.BTestClick(Sender: TObject);
    begin
      if Op1.Execute then
      begin
        showmessage('Taille du fichier '+Op1.FileName +': '+IntToSt(TailleFichier(Op1.FileName)));
      end;
    end;
    Si quelqu'un a mieux, cela m'intéresse.

    Merci d'avance,

    @+,

    Cincap

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 64
    Points : 69
    Points
    69
    Par défaut
    Bonjour

    je dirai que la taille est bonne

    6001637 octets / 1024 nous donne 5860,97 donc si tu arrondit 5861 Ko et si tu redivise par 1024 ca nous donne 5,72 Mo.

    Cordialement
    Sébastien

  3. #3
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    C'est correct.

    L'affichage est en Ko = 1024 octets et en Mo = 1024 * 1024 octets.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Correct !
    Y a t'il moyen alors avec cette fonction de calculer et d'afficher directement le résultat en Mo.

    Merci d'avance,

    @+,

    Cincap

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Est-ce que cette Q/R de la FAQ répond à ta question ?

    @+ Claudius

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Ou bien ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     function fGoMoKo(const mem : DWord) : string; // pour afficher une taille en DWord via la string-Result au format raccourci
      var      e : byte; s : string; r : Extended;
      begin    e:=0; r:=mem;
               if r>=0 then
               begin while r>1024 do begin r:=r/1024; inc(e); end;
                     case e of
                        0 : s:='Oct';
                        1 : s:='Ko';
                        2 : s:='Mo';
                        3 : s:='Go';
                        4 : s:='To';
                     end;
                     fGoMoKo:=FormatFloat('#.###',r)+' '+s;
               end;
      end; // fGoMoKo
    A+

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 256
    Points
    25 256
    Par défaut
    Avec un DWord, on atteind jamais le To ! et GetFileSize j'ai les Int64 via des LargeInt (Double DWord)

  8. #8
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Et si tout le monde utilisait les unités kio, Mio et Gio (kibioctet, mibioctet et gibioctet) conformément aux recommandations de la Commission électrotechnique internationale, il n'y aurait plus de confusion... considérer qu'un Go vaut 1 milliard d'octet n'est absolument pas faux, car en métrologie un préfixe ne saurait avoir plusieurs significations. Donc 1 gigatruc = 10^9 truc, point. Ce sont les habitudes de sagouin du monde de l'informatique qui ont engendré les confusions du genre 1 giga = 2^30, largement entretenus par Microsoft dans Windows, d'ailleurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     function fGioMioKio(const mem : Int64) : string; 
      var      e : byte; s : string; r : Extended;
      begin    e:=0; r:=mem;
               if r>=0 then
               begin while r>1024 do begin r:=r/1024; inc(e); end;
                     case e of
                        0 : s:='Oct';
                        1 : s:='Kio';
                        2 : s:='Mio';
                        3 : s:='Gio';
                        4 : s:='Tio';
                     end;
                     Result:=FormatFloat('#.###',r)+' '+s;
               end;
      end; // fGioMioKio


    Tiens, me v'là membre éprouvé... ô combien !

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 663
    Points
    5 663
    Par défaut
    Gao,
    Citation Envoyé par CapJack Voir le message
    largement entretenus par Microsoft dans Windows, d'ailleurs.
    Microsoft ne fait que suivre l'habitude bien établie en informatique.

    D'ailleurs, c'est la même chose chez Linux (et d'autres, VMS par exemple), pourquoi ne pas le signaler également ?

  10. #10
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Citation Envoyé par droggo Voir le message
    D'ailleurs, c'est la même chose chez Linux (et d'autres, VMS par exemple), pourquoi ne pas le signaler également ?
    Voilà qui est fait.

    Habitude bien établie, certes, mais habitude de sagouin quand même, malheureusement.

  11. #11
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    Les seuls qui aiment les unités de la CEI sont les fabriquants de disques durs, qui t'annoncent allègrement des capacités de "750 GB" (en fait 750 GiB), ce qui donne 698 Go d'après le système d'exploitation...

  12. #12
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Non, là tu confonds, désolé, ce serait en théorie 750 GB = 698GiB ; et justement, les fabricants de disque dur n'aiment pas du tout ces unités, car elles correspondraient à des valeurs réelles en base deux, ce qui les forcerait à booster la capacité des disques durs.

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour à tous,

    Merci CapJack pour avoir rectifié ma fonction : j'avais pas fait gaffe au DWord lorsque dans mon emballement, arrivé aux GigaOctets, je me suis dit tiens pendant que j'y suis je vais y ajouter les Téras en prévision d'une éventuelle évolution des choses (j'ai seulement 225 Mo de mem-vive-totale )

    A+

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut Bien bien merci à tous !
    @ Gilbert Geyer et CapJack, vos fonctions calculent 4,213Mo pour le même fichier qui affiche 5,72M et 5861Ko.

    Soit le même résultat si jutilise la fonction qui utilise la dll 'shlwapi.dll'

    Je fais peut être une erreur quant à l'utilisation de vos fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Var
    Value: Dword;  //LongWord
     
    ...
     
    edittaille.Text := fGoMoKo(value) ;
     
    ou
     
    edittaille.Text := fGioMioKio(value);
    Sinon merci à tous pour les idées,

    @+,

    Cincap

  15. #15
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-salut,

    Gilbert Geyer et CapJack, vos fonctions calculent 4,213Mo pour le même fichier qui affiche 5,72M et 5861Ko. ...
    Je fais peut être une erreur quant à l'utilisation de vos fonctions :
    ... "pour le même fichier qui affiche 5,72M et 5861Ko" : oui mais on ne sait pas comment ni avec quelle fonction il affiche ce résultat.

    Non t'as pas fait d'erreur dans l'utilisation ... Essayes les fonctions avec Value:=6001664; //<- = 5861*1024 octets
    et ça t'affichera aussi 5,723 Mo ou 5,723 Mio.

    A+

  16. #16
    Membre éclairé

    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Points : 837
    Points
    837
    Par défaut
    Citation Envoyé par CapJack Voir le message
    Non, là tu confonds, désolé, ce serait en théorie 750 GB = 698GiB ; et justement, les fabricants de disque dur n'aiment pas du tout ces unités, car elles correspondraient à des valeurs réelles en base deux, ce qui les forcerait à booster la capacité des disques durs.
    Ouh
    Oui je me suis trompé. Merci de ta correction.

  17. #17
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    cincap, je te propose le jeu de fonctions suivant, que je préfixe CEI (pour Commission électrotechnique internationale) afin que les choses soient parfaitement claires et dépourvues de toute ambiguïté, enfin j'espère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function CEI_TiGiMiki(const mem : Int64) : string; 
      var      e : byte; s : string; r : Extended;
      begin    e:=0; r:=mem;
               if r>=0 then
               begin while r>1024 do begin r:=r/1024; inc(e); end;
                     case e of
                        0 : s:='oct';
                        1 : s:='kio';
                        2 : s:='Mio';
                        3 : s:='Gio';
                        4 : s:='Tio';
                     end;
                     Result:=FormatFloat('#.###',r)+' '+s;
               end;
      end;
     
    function CEI_ToGoMoko(const mem : Int64) : string; 
      var      e : byte; s : string; r : Extended;
      begin    e:=0; r:=mem;
               if r>=0 then
               begin while r>1000 do begin r:=r/1000; inc(e); end;
                     case e of
                        0 : s:='oct';
                        1 : s:='ko';
                        2 : s:='Mo';
                        3 : s:='Go';
                        4 : s:='To';
                     end;
                     Result:=FormatFloat('#.###',r)+' '+s;
               end;
      end;
    Ce que font tous les systèmes d'exploitation, c'est TiGiMiki, même s'ils écrivent To, Go, Mo, et ko , et ce que toi tu veux, si j'ai bien tout compris, sera fourni par CEI_ToGoMoko... tu ne serais pas fabricant de disques durs, par hasard ?

  18. #18
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @Gilbert Geyer

    "pour le même fichier qui affiche 5,72M et 5861Ko" : oui mais on ne sait pas comment ni avec quelle fonction il affiche ce résultat.
    Ce résultat n'est pas affiché grâce à une fonction mais lorsque le curseur est posé sur le fichier qui se trouve dans un dossier et visible dans l'exploreur.

    Je vais donc cloturer ce topic et merci encore pour vos différents messages.

    @+,

    Cincap

  19. #19
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 256
    Points
    25 256
    Par défaut
    C'est marrant, j'avais l'impression d'avoir déjà eu la même discussion sur ce forum, j'ai retrouvé sur Phidels, il y a pile poil deux ans , et ZeuS-[SFX] parlait déjà du KibiOctet, mais je me rappèle que sur Developpez.com on en a parlé aussi !

    En tout cas, la notation, en puissance 10, pour la capacité des DD, eh bien les vendeurs, il abusait pour faire croire à une capacité plus grande en juant que cela donnait un chiffre plus grande que via les puissance de 2 ... (CEI vous dites, c'est bon à savoir)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Taille réelle espace utilisée fichier de donnée
    Par zut94 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/12/2008, 23h02
  2. Réponses: 9
    Dernier message: 26/08/2006, 19h35
  3. Lecture de la taille réelle du fichier .mdf
    Par carjo dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 13/01/2006, 19h42
  4. [VB.Net] Taille réelle d'un composant avec Scroll
    Par maitrebn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/01/2006, 13h36
  5. [debutant] Dessiner en taille réelle
    Par -=Spoon=- dans le forum OpenGL
    Réponses: 1
    Dernier message: 29/01/2005, 04h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo