Probleme de zero binaire dans un enregistrement

Signaler
Messages postés
1
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
21 juin 2010
-
Messages postés
14
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
9 mars 2011
-
Bonjour a tous,
Je vous ecris afin de trouver un peu d'aide. Mon problème est le suivant:
Je dois lire, ligne par ligne, un fichier en entrée, manipuler et modifier certaines parties de chaque ligne et ensuite reconstituer ces lignes avec les nouvelles données afin de recréer le fichier comme a l'origine le tout en langage C.
Hors mes lignes continnent des zéros binaires et ceci pose de sérieux problèmes. Toute la partie manipulation des données me pose pas de problème. MAis par contre, pour ce qui est de lire et ecrire une ligne dans un fichier lorsqu'il y a des zéros binaires c'est moins evident. Pour ce qui est d ela lecture j'ai l'impression que le bon vieux fgets fonctionne. Par contre mes essais avec fwrite, fprintf fputs ne marchent pas. Les zéros binaires ne sont pas pris en chatge et mettent le bazar dans mes données.
Quelqu'un aurait'il une solution a ce problème??
Je vous remercie d'avance de votre aide.
Cdt
Thefifou


THEFIFOU

3 réponses

Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Normalement, tu peux spécificer la taille de ce que tu veux stocker, donc il n'y a pas de problème, même avec des 0 binaire...

Ceci fonctionne parfaitement chez moi:
#include <stdio.h>

int main(void)
{
  FILE* pFile;
  int buffer[6] = {123, 7895, 45897, 0, 0, 4521};
  int buffer2[6];
  int i = 0;

  pFile = fopen("myfile.bin", "wb");
  fwrite(buffer, sizeof (int), 6, pFile);
  fclose(pFile);

  pFile = fopen("myfile.bin", "rb");
  fread(buffer2, sizeof (int), 6, pFile);
  fclose(pFile);

  for (i = 0; i < 6; ++i)
    printf("%i ", buffer2[i]);
  printf("\n");

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Oups, j'ai du mal comprendre ta question.

Donc deux solutions:
- Tu utilises getline, qui récupère une seule ligne (avec des 0): http://users.powernet.co.uk/eton/kandr2/krx116.html
- Tu utilises fgets et tu récupères caractère par caractère jusqu'à trouver un \n (fin de ligne), ou jusqu'à la fin du fichier via feof(fichier). Si tu ne traites pas les 0 comme des caractères spéciaux, pas de souci :p

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
14
Date d'inscription
vendredi 14 mai 2010
Statut
Membre
Dernière intervention
9 mars 2011

Sachant que le 0 binaire '\0' caractérise la fin d'une chaîne ("1234\0", peut-être que ces fonctions de C considèrent tout ce qu'il y a avant ce 0 comme une chaîne et ne prennent pas ce qui suit?
Solutions : lecture caractère par caractère ou bien fonctions C++.