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 :

ecriture en binaire vs indirect


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Par défaut ecriture en binaire vs indirect
    bonsoir ,
    j'ai un peu teste les different mode d'ecritures et il y'a une grande difference que je ne comprend pas .
    voila le code qui est tres simple :
    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
    32
    #include<stdio.h>
    #include<stdlib.h> /*pour la fonction exit*/
     
    #define MAX 5
     
    int main(void){
        FILE *fp;
        int t[5]={1,2,3,4,5};
        int i=0;
     
        if( (fp = fopen("test.txt","wb")) == NULL ){
            perror("ouverture en ecriture");
            exit(1);
        }
     
        fwrite(t,sizeof(int),MAX,fp);
        printf("%ld\n",ftell(fp));/*affiche 20*/
        fclose(fp);
        if( (fp = fopen("test2.txt","w"))== NULL ){
            perror("ouverture en ecriture");
            exit(2);
        }
     
        for(i=0;i<MAX;i++)
            fprintf(fp,"%d ",t[i]);
        printf("%ld\n",ftell(fp));/*affiche 10*/
        fclose(fp);
     
     
     
        return 0;
    }
    pourquoi en binaire le ftell m'affiche 20 et en normale il m'affiche 10 . alors que c'est la meme serie de nombre , je ne vois donc vraiment pas comment on peux se depacer sur un fichier en mode binaire ?
    donc dois-je conclure que l'ecriture en mode binaire prend une grande place ?et surtous pourquoi ?
    en esperant avoir ete claire , je vous souhaite une bonne nuit .

  2. #2
    Membre très actif Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Par défaut
    j'ai une autre question :
    - quand est ce qu'on utilise fflush(flot du fichier) . car je ne vois vraiement pas son utilitee , vu que l'ecriture en fichier ne peux pas echouer .

  3. #3
    Membre très actif

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Par défaut
    Bonjour,

    Je crois que tu confonds écriture en binaire et écriture en binaire ...

    Écriture en binaire :
    Le "b" du "wb" de fopen ne sert qu'à éventuellement transformer les caractères de fin de ligne entre le fichier et ce que reçoit le programme. Le C considère en effet la fin de ligne indiquée par un seul caractère 0x0A, alors que typiquement, un fichier texte DOS ou Windows contiendra une paire de caractères 0x0D 0x0A. Par exemple si le fichier texte windows contient les octets (hex) 41 0D 0A 42 0D 0A (soit A et B chacun sur une ligne) en mode "b", le programme recevra 6 octets, alors qu'en mode non "b", le programme ne recevra que 4 octets (les 0D qui précedent un 0A sont supprimés). Sous UNIX/Linux, il n'y a aucune différence que le "b" soit présent ou pas, puisque les fin de lignes des fichiers textes sont indiquées par le seul caractère 0x0A, comme en C.

    Écriture en binaire :
    Quand tu utilises fwrite(), tu écris directement les octets de la représentation binaire de ce que tu envoies. Dans ton premier cas tu écris donc 5 fois 4 octets (la taille d'un int est 4). Ton fichier contient donc 20 octets (en hexa) : 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00.
    Quand tu utilises fprintf("%d "), tu écris du texte, et donc les octets de la représentation ASCII des nombres que tu envoies, séparés par des espaces. Ton fichier contient donc 10 octets (toujours en hexa) : 31 20 32 20 33 20 34 20 35 20.

    Didier

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par elmcherqui Voir le message
    int t[5]={1,2,3,4,5};
    Ecriture en binaire :"0000000100000002000000030000000400000005", soit 20 octects
    Ecriture texte (fprintf(fp,"%d ",t[i])) : "1 2 3 4 5 ", soit 10 octets.
    Ouvre les fichiers et tu verras tout de suite la différence.

    Citation Envoyé par elmcherqui Voir le message
    donc dois-je conclure que l'ecriture en mode binaire prend une grande place ?
    "FFFFFFFF" (4 octets) en binaire sera écrit "4294967295" (10 octets) en texte.
    Citation Envoyé par elmcherqui Voir le message
    quand est ce qu'on utilise fflush(flot du fichier) .
    Quand on veut forcer à écrire les données depuis la mémoire vers le disque.
    Citation Envoyé par elmcherqui Voir le message
    car je ne vois vraiement pas son utilitee , vu que l'ecriture en fichier ne peux pas echouer .
    Ah bon? Si ton programme plante, ou l'OS plante, ou tu as une brusque coupure d'électricité et que les écritures n'avaient pas été faites, elles sont perdues. fflush permet de garantir qu'après son appel les données ont bien été transférées sur le disque.

    Je pense que tu devrais faire un petit tour vers les différents tutos pour comprendre la différence entre mode texte et mode binaire, la gestion des fichiers, etc...
    Bon courage.

Discussions similaires

  1. Lecture/Ecriture en binaire
    Par benito9253 dans le forum Windows Forms
    Réponses: 15
    Dernier message: 09/10/2009, 00h35
  2. Lecture et ecriture fichier binaire
    Par gedonet dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 20/04/2009, 19h51
  3. lecture ecriture fichier binaire
    Par jonckers dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/04/2007, 09h12
  4. Ecriture fichier binaire : Format TIFF
    Par xChRiSx dans le forum C++
    Réponses: 2
    Dernier message: 12/04/2007, 18h39
  5. Ecriture mot binaire
    Par Condor7 dans le forum C
    Réponses: 6
    Dernier message: 16/07/2004, 12h39

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