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 :

Lire & écrire buffer uint8 dans un fichier


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    COO
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : COO

    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Par défaut Lire & écrire buffer uint8 dans un fichier
    Bonjour à tous,

    je début en c++ et je suis un peu perdu dans un problème de lecture / écriture de fichier. Je dois écrire un buffer de uint8 et le retrouvé en lecture par la suite.

    Voici mon code:
    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
     
    uint8 buf[512];
     
    // remplissage du buffer
    //...
    //
     
    //Juste pour voir qu'il y a qqc dedans et que c'est très moche
    cout.write((char*) buf,sizeof buf);
    DumpBytes(buf,512,16);
     
    //Ecriture du fichier
    fstream SaveFile("my_file", ios::ate | ios::trunc | ios::binary);
    SaveFile.write((char *) buf,sizeof buf);
    SaveFile.flush();
    SaveFile.close();
     
    //Lecture du fichier
    ifstream ReadFile("my_file");
    uint8 buf2[512];
    ReadFile.read((char*) buf2,512);
    cout.write((char *) buf2,sizeof buf2);
    DumpBytes(buf2,512,16);
    ReadFile.close();
    Affichage du buf avant écriture:

    0000 : 31 c0 8e d0 66 bc 00 7c 00 00 8e c0 8e d8 89 e6 1...f..|........
    0010 : 66 bf 00 06 00 00 66 b9 00 01 00 00 f3 a5 ea 23 f.....f........#
    0020 : 06 00 00 80 fa 80 7c 05 80 fa 87 7e 02 b2 80 88 ......|....~....
    0030 : 16 49 07 66 bf be 07 00 00 31 f6 66 b9 04 00 00 .I.f.....1.f....
    0040 : 00 67 80 3f 80 75 07 85 f6 75 0c 66 89 fe 83 c7 .g.?.u...u.f....
    0050 : 10 e2 ee 85 f6 75 0b 66 be 4a 07 00 00 e9 8d 00 .....u.f.J......
    0060 : 00 00 8a 16 49 07 66 31 c9 66 31 c0 b4 08 cd 13 ....I.f1.f1.....
    0070 : c1 ea 08 42 89 c8 83 e0 3f 89 cb c1 e9 08 81 e3 ...B....?.......
    0080 : c0 00 00 00 c1 e3 02 09 d9 41 f7 e2 66 f7 e1 8a .........A..f...
    0090 : 16 49 07 66 67 8b 5e 08 66 39 c3 66 7c 63 66 56 .I.fg.^.f9.f|cfV
    00a0 : 52 66 bb aa 55 00 00 b4 41 cd 13 5a 66 5e 72 51 Rf..U...A..Zf^rQ
    00b0 : 66 b8 55 aa 00 00 39 c3 75 47 f6 c1 01 74 42 67 f.U...9.uG...tBg
    00c0 : 66 c7 06 10 00 01 00 67 66 c7 46 04 00 7c 00 00 f......gf.F..|..
    00d0 : 67 66 c7 46 0c 00 00 00 00 b6 05 56 52 b4 42 cd gf.F.......VR.B.
    00e0 : 13 5a 5e 73 45 fe ce 75 f2 66 be 76 07 00 00 ac .Z^sE..u.f.v....
    00f0 : 84 c0 74 0a b4 0e b3 07 56 cd 10 5e eb f1 fb eb ..t.....V..^....
    0100 : fd 67 8a 76 01 67 8b 4e 02 66 bf 05 00 00 00 66 .g.v.g.N.f.....f
    0110 : bb 00 7c 00 00 66 b8 01 02 00 00 57 52 51 cd 13 ..|..f.....WRQ..
    0120 : 59 5a 5f 73 05 4f 75 e7 eb bf 66 be 62 07 00 00 YZ_s.Ou...f.b...
    0130 : 67 a1 fe 7d 00 00 66 bb 55 aa 00 00 39 c3 75 af g..}..f.U...9.u.
    0140 : 8a 16 49 07 ea 00 7c 00 00 80 49 6e 76 61 6c 69 ..I...|...Invali
    0150 : 64 20 70 61 72 74 69 74 69 6f 6e 20 74 61 62 6c d partition tabl
    0160 : 65 00 4e 6f 20 6f 70 65 72 61 74 69 6e 67 20 73 e.No operating s
    0170 : 79 73 74 65 6d 00 45 72 72 6f 72 20 6c 6f 61 64 ystem.Error load
    0180 : 69 6e 67 20 6f 70 65 72 61 74 69 6e 67 20 73 79 ing operating sy
    0190 : 73 74 65 6d 00 00 00 00 00 00 00 00 00 00 00 00 stem............
    01a0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    01b0 : 00 00 00 00 00 00 00 00 c9 2e 0e 00 00 00 00 01 ................
    01c0 : 01 00 82 fe 3f f6 3f 00 00 00 f8 8b 3c 00 80 00 ....?.?.....<...
    01d0 : 01 f7 83 fe ff ff 37 8c 3c 00 ef 6b a3 01 00 00 ......7.<..k....
    01e0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    01f0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa ..............U.
    Affichage du buf2 après la lecture:
    0000 : 31 c0 8e d0 66 bc 00 00 58 86 2e de 77 2b 00 00 1...f...X...w+..
    0010 : b8 05 00 00 00 00 00 00 58 86 2e de 77 2b 00 00 ........X...w+..
    0020 : 80 06 00 00 00 00 00 00 58 22 2f de 77 2b 00 00 ........X"/.w+..
    0030 : 79 3a 3c 07 00 00 00 00 2f e7 bb dc 77 2b 00 00 y:<...../...w+..
    0040 : 50 2e ef cd ff 7f 00 00 0e 00 00 00 00 00 00 00 P...............
    0050 : 60 2e ef cd ff 7f 00 00 68 b6 55 de 77 2b 00 00 `.......h.U.w+..
    0060 : c5 d8 15 0a 00 00 00 00 43 d9 55 de 77 2b 00 00 ........C.U.w+..
    0070 : 10 00 00 00 00 00 00 00 b0 c3 2f de 77 2b 00 00 ........../.w+..
    0080 : 46 b7 30 de 77 2b 00 00 f0 72 50 00 00 00 00 00 F.0.w+...rP.....
    0090 : 00 00 00 00 00 00 00 00 f0 72 50 00 00 00 00 00 .........rP.....
    00a0 : 79 3a 3c 07 00 00 00 00 b0 76 50 00 00 00 00 00 y:<......vP.....
    00b0 : 90 2e ef cd ff 7f 00 00 b0 76 50 00 00 00 00 00 .........vP.....
    00c0 : a0 2e ef cd ff 7f 00 00 60 2e ef cd ff 7f 00 00 ........`.......
    00d0 : c5 d8 15 0a 00 00 00 00 10 6d 50 00 00 00 00 00 .........mP.....
    00e0 : a0 2e ef cd ff 7f 00 00 58 86 2e de 77 2b 00 00 ........X...w+..
    00f0 : 94 01 00 00 00 00 00 00 38 ac 2e de 77 2b 00 00 ........8...w+..
    0100 : 00 00 00 00 00 00 00 00 2f e7 bb dc 77 2b 00 00 ......../...w+..
    0110 : 61 82 46 0d 00 00 00 00 0e 00 00 00 00 00 00 00 a.F.............
    0120 : 30 2f ef cd ff 7f 00 00 28 9c 55 de 77 2b 00 00 0/......(.U.w+..
    0130 : d8 4c 8e 01 00 00 00 00 c0 f5 55 de 77 2b 00 00 .L........U.w+..
    0140 : 10 00 00 00 00 00 00 00 b0 c3 2f de 77 2b 00 00 ........../.w+..
    0150 : 46 b7 30 de 77 2b 00 00 60 73 50 00 00 00 00 00 F.0.w+..`sP.....
    0160 : 00 00 00 00 00 00 00 00 f0 72 50 00 00 00 00 00 .........rP.....
    0170 : 50 2f ef cd ff 7f 00 00 10 2f ef cd ff 7f 00 00 P/......./......
    0180 : 61 82 46 0d 00 00 00 00 b0 76 50 00 00 00 00 00 a.F......vP.....
    0190 : 70 2f ef cd ff 7f 00 00 30 2f ef cd ff 7f 00 00 p/......0/......
    01a0 : d8 4c 8e 01 00 00 00 00 10 6d 50 00 00 00 00 00 .L.......mP.....
    01b0 : 70 2f ef cd ff 7f 00 00 b8 04 40 00 00 00 00 00 p/........@.....
    01c0 : 31 0b 40 00 00 00 00 00 48 15 bd dc 77 2b 00 00 1.@.....H...w+..
    01d0 : 18 00 00 00 00 00 00 00 00 2a cd dc 77 2b 00 00 .........*..w+..
    01e0 : 24 00 00 00 00 00 00 00 60 2d cd dc 77 2b 00 00 $.......`-..w+..
    01f0 : 0c 00 00 00 00 00 00 00 73 e8 bb dc 77 2b 00 00 ........s...w+..
    Il n'y a que la moitié de la première ligne (31 c0 8e d0 66 bc 00) qui est écrite dans le buf2 et l'affichage du deuxième cout est complète à côté de la plaque (sauf pour les 8 premier char).

    Merci pour votre aide.

    Mario

    PS: je suis sur linux

  2. #2
    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
    Salut,
    Le problème : tu ne spécifies pas le type d'ouverture de ton fichier fstream (lecture ou écriture) -> échec de l'ouverture. Ton fichier n'est pas mis à jour voire créer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fstream SaveFile("my_file", ios::ate | ios::trunc | ios::binary |ios::out);
    Ou mieux, utilises un ofstream :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofstream SaveFile("my_file", ios::ate | ios::trunc | ios::binary);
    Moralité : tester si tes opérations ont réussi peut parfois être utile
    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
    33
    34
    35
    36
    37
    38
    39
    40
    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <algorithm>
     
    int main()
    {
       typedef unsigned char uint8;
       typedef std::vector<uint8>::size_type v_size_type;
       v_size_type const buf_size = 512;
       std::vector<uint8> buf(buf_size);
     
       //Ecriture du fichier
       {
          std::ofstream SaveFile("my_file", std::ios::ate | std::ios::trunc | std::ios::binary);
          if(!SaveFile){
             throw "erreur ouverture/creation fichier ecriture";
          }
          SaveFile.write(reinterpret_cast<char const*>(&buf[0]),buf.size()*sizeof(buf[0]));
          if(!SaveFile){
             throw "erreur ecriture fichier";
          }
       }
     
       //Lecture du fichier
       std::vector<uint8> buf_read(buf_size);
       {
          std::ifstream ReadFile("my_file");
          if(!ReadFile){
             throw "erreur ouverture fichier lecture";
          }
          ReadFile.read(reinterpret_cast<char*>(&buf_read[0]),buf_read.size()*sizeof(buf_read[0]));
          if(!ReadFile){
             throw "erreur lecture fichier";
          }
       }
       std::cout<<std::boolalpha<<std::equal(buf.begin(),buf.end(),buf_read.begin()) <<std::endl;
     
       return 0;
    }

  3. #3
    Membre habitué
    Profil pro
    COO
    Inscrit en
    Juillet 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : COO

    Informations forums :
    Inscription : Juillet 2008
    Messages : 7
    Par défaut
    Merci pour ta réponse!!
    Je viens de me rendre compte de ma bêtise

    C'est une bonne idée de tester tout de suite après, ça m'aurait éviter de chercher dans la mauvaise direction tout une matinée...
    Je viens du Java et là ça pète tout de suite à la figure si c'est pas correcte alors que là il m'a laissé écrire quand même 8 bytes dans mon fichier sans rien me dire... Du coups je comprenais pas pourquoi ça fonctionnait à moitié!

    Encore merci pour ta réponse!

    Mario

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

Discussions similaires

  1. Comment écrire une section dans un fichier ini?
    Par Jayceblaster dans le forum Delphi
    Réponses: 5
    Dernier message: 26/06/2006, 14h08
  2. Réponses: 7
    Dernier message: 17/03/2006, 13h26
  3. Réponses: 8
    Dernier message: 13/10/2005, 21h24
  4. Écrire un TBitmap dans un fichier
    Par prgasp77 dans le forum Langage
    Réponses: 8
    Dernier message: 23/05/2005, 23h07
  5. [FileWriter] écrire à la suite dans un fichier.
    Par LoLoSS dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/06/2004, 14h56

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