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 Discussion :

Taille d'un fichier différente selon la méthode


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Taille d'un fichier différente selon la méthode
    Bonjour à tous !

    Alors premièrement j'indique que je ne programme pas pour pc mais pour calculette. Cependant le problème auquel je suis confronté m'a tout l'air d'être une spécificité du C, c'est donc pour cela que je viens sur ce forum.

    Mon but est de créer une petite librairie d'archivage à l'aide des fonctions de compression de zlib. J'ai donc un fichier source, et un fichier produit par mon programme. Je teste ensuite la taille de mes deux fichiers à l'aide de 3 fonctions différentes. Mon problème est que le résultat donné par la troisième fonction donne un résultat différent des deux autres pour le fichier output (compressé) uniquement !.

    La première utilise fseek() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    long GetFileSize(FILE *f)
    {
    	long t1 = ftell(f);
    	fseek(f, 0, SEEK_END);  // on se place au bout
    	long t2 = ftell(f);  // on obtient la taille du fichier
    	fseek(f, t1, SEEK_SET);
    	return t2;
    }
    La deuxième utilise la structure stat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    long GetFileSize2(const char *f)
    {
    	struct stat s;
    	stat(f, &s);
    	return s.st_size;
    }
    La troisième lit et affiche tous les caractères jusqu'à arriver à la fin du fichier :
    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
    int dispFileData(SDL_Surface *scr, nSDL_Font *font, int px, int py, FILE *f)
    {
    	int x;
    	static char tmp[256] = "";  // la taille des fichiers en question ne dépasse pas 256, donc le problème ne se situe pas là
     
    	fseek(f, 0, SEEK_SET);
    	for (x=0; x < 254 && !feof(f) && !ferror(f); x++) {
    		tmp[x] = fgetc(f);
    		if (!tmp[x]) tmp[x] = 1;  // on remplace les 0 par des 1 parce que tmp est une chaîne de caractères
    	}
    	tmp[x] = 0;  // on met un 0 à la fin pour afficher la chaîne sans erreur
     
    	nSDL_DrawString(scr, font, px, py, "::%s", tmp);  // on affiche à l'écran le contenu du fichier
     
    	if (ferror(f)) wShowMsg("DEBUG", "Erreur dans la lecture du fichier compresse !");  // Message indicatif
    	else if (feof(f)) wShowMsg("DEBUG", "Fin lecture fichier");
     
    	return x;  // on retourne le nombre d'octets lus (= taille du fichier)
    }

    Je travaille avec des petits fichiers (~100 octets) pour commencer. Comment est-il possible que le fichier compressé ait une taille différente avec la 3e fonction (cela me donne un résultat plus petit : j'arrive à la fin du fichier avant de l'avoir lu en entier) ?

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Ton fichier est-il ouvert en mode texte?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Oui il est ouvert en mode texte.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 545
    Points
    41 545
    Par défaut
    Alors c'est probablement ce qui cause la différence. Je ne connais pas ta plate-forme, mais sous DOS/Windows, quand un fichier est ouvert en mode texte, un retour à la ligne "vu du programme" (Un simple \n) correspond à deux octets dans le fichier (\r\n). Il y a probablement un truc similaire dans ta calculatrice.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    C'est bon à savoir ! Pour moi l'ouverture en fichier texte/binaire était seulement une 'indication' du type du fichier qu'on ouvrait. À présent je ferais plus attention.

    C'était bien cela l'erreur. L'ouverture en fichier binaire corrige le problème

    Merci !

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Merci de cliquer sur le bouton en bas de l'écran si vous n'avez plus de question sur ce problème.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/07/2011, 09h59
  2. Réponses: 4
    Dernier message: 08/02/2007, 16h23
  3. Réponses: 1
    Dernier message: 18/07/2006, 17h24
  4. tailles d'input différentes selon les postes (?)
    Par mch_27 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/10/2005, 11h21
  5. CSS : fichier include différent selon chaque resolution
    Par Sylvain245 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 31/03/2005, 17h57

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