Probleme de zero binaire dans un enregistrement

thefifou Messages postés 1 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 21 juin 2010 - 21 juin 2010 à 11:32
manudiclemente Messages postés 14 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 9 mars 2011 - 2 juil. 2010 à 05:30
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
21 juin 2010 à 12:02
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]
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
21 juin 2010 à 12:06
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]
0
manudiclemente Messages postés 14 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 9 mars 2011
2 juil. 2010 à 05:30
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++.
0
Rejoignez-nous