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

C++Builder Discussion :

Calcul de la taille d'une variable


Sujet :

C++Builder

  1. #1
    Membre �m�rite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    916
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 916
    Par d�faut Calcul de la taille d'une variable
    Bonjour,
    J'aimerais savoir s'il est possible de calculer la taille d'une variable. Je m'explique: J'ai une TStringList qui est au final enregistr� dans un fichier. Il est possible que ce fichier prenne un poids non n�gligeable, c'est pourquoi j'aimerais afficher � l'utilisateur la valeur que prendra le fichier s'il est sauvegard�.

    Aujourd'hui dans un Timer, je sauvegarde ma liste dans un fichier et j'utilise la m�thode GetFileAttributesEx mais si le fichier est trop lourd, le timer relance l'interruption avant que le fichier soit totalement sauvegard� et cela g�n�re une interruption.

    Je voudrais juste savoir s'il existe une m�thode pour conna�tre la taille de cette liste en o, ko, Mo, ou Go direct ! et �viter ainsi de passer par une sauvegarde et d�tecter les exceptions au cas ou.

    Merci d'avance

  2. #2
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Juin 2006
    Messages
    122
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 122
    Par d�faut
    Bah, moi, je ense que tu doit juste savoir la taille d'un caract�re (4 ou 8 bit je croi) et apres, de calculer le nombre de caract�re dans ton fichier, et tu saura aproximativement la taille de ton fichier

    (mais c'est juste une des nombreuses m�thodes)

  3. #3
    Membre �m�rite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    916
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 916
    Par d�faut
    Pas b�te, 1 caract�re = 1 octet (8 bits) mais il faut prendre en compte les '\n' qui font 1 caract�res de plus.

    C'est une bonne id�e, je creuse ca et j'annonce le r�sultat.
    Merci Galkir

  4. #4
    Membre �m�rite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par d�faut
    et pourquoi ne pas convertir ta chaine en byte?


  5. #5
    Membre �m�rite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par d�faut
    il y aussi une autre m�thode en utilisant un outputstream en ecrivant dans le fichier � travers un buffer (de 1024 par exemple) et en utilisant une boucle pour ecrire dans le fichier tout en incr�mentant une variable long "taille" de 1024 � chaque it�ration

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par d�faut
    Citation Envoy� par chamamo
    et pourquoi ne pas convertir ta chaine en byte?


    Tu fais comment ensuite pour connaitre la taille de b ?

  7. #7
    Membre �m�rite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    916
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 916
    Par d�faut
    Merci pour ces solutions. Je suis parti comme Galkir avait sugg�r�.
    J'obtiens le code suivant.
    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
     
        int i,caracteres=0;
     
        for(i=0;i<Liste->Count;i++)
            caracteres = caracteres + Liste->Strings[i].Length()+2;
        //calculation in o, ko, Mo and Go
        if(caracteres < 1024)                         //
        {
            StatusBar1->Panels->Items[4]->Text = IntToStr(caracteres)+bytes;
        }
        else
        {
            if((caracteres/1024) < 1024)
            {
                StatusBar1->Panels->Items[4]->Text = FloatToStrF(caracteres/1024.0,ffFixed,5,2)+kilobytes;
            }
            else
            {
                if((caracteres/1024)/1024 < 1024)
                {
                    StatusBar1->Panels->Items[4]->Text = FloatToStrF(caracteres/1024.0/1024.0,ffFixed,5,2)+megabytes;
                }
                else
                {
                    StatusBar1->Panels->Items[4]->Text = FloatToStrF(caracteres/1024.0/1024.0/1024.0,ffFixed,5,2)+gigabytes;
                }
            }
        }
    Comme j'ai du texte, cela me permet de calculer la taille que prendra le fichier lorsqu'il sera sauvegard�. A chaque fin de cha�ne j'ai 2 caract�res suppl�mentaires pour l'organisation du fichier, l'un est '\n' mais je ne vois pas le second.
    En attendant, cette m�thode fonctionne, Merci !

  8. #8
    Membre �m�rite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par d�faut
    chaque line est une cha�ne alors le second est "\0" caract�re de fin de cha�ne

    tu as d�ja essayer sizeof??

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Par d�faut
    bah oui mais sizeof ne te renverra pas la taille (le nombre d'octets) de la chaine b... c'est pour ca que j'ai pose la question, ca m'intrigue...

    ex:
    char* c="TATAYOYO";
    byte* b=(byte*)c;

    que tu fasses:

    sizeof(b); ou sizeof(c); (ou sizeof n'importe quel pointeur d'ailleurs...)
    ca te renverra toujours 4 (sur une machine 32 bits), parce que l'adresse d'un pointeur est toujours codee sur 4 octets;
    le sizeof du langage C renvoie l'espace occup� par son argument en nombre de bytes...

    pour connaitre le nombre d'octets occupes par c moi je ferais plutot:

    sizeof(char)*strlen(c) // strlen tout seul suffit en fait...

    si t'as une autre solution avec ton cast et juste sizeof, ca m'interresserais, mais perso je vois pas l'interet de caster en byte ... vu que de toute maniere un char ou un byte ca fait 1 octet... (dites moi si je me trompe...)

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Calcul de la taille d'une image
    Par 3issam84 dans le forum Traitement d'images
    R�ponses: 4
    Dernier message: 07/03/2009, 15h31
  2. Obtenir la taille d'une variable
    Par devtroll dans le forum Langage
    R�ponses: 6
    Dernier message: 04/08/2008, 15h55
  3. taille d'une variable de type char
    Par NeMo_O dans le forum C
    R�ponses: 17
    Dernier message: 26/11/2006, 01h17
  4. Comment savoir la taille d'une variable
    Par killerjeff dans le forum C++
    R�ponses: 30
    Dernier message: 09/12/2005, 16h07
  5. Calcul de la taille d'une future base de donn�es
    Par Kuma25 dans le forum D�cisions SGBD
    R�ponses: 3
    Dernier message: 17/08/2005, 09h54

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