Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lecture d'un fichier

Caractère 0x1A ...

Sujet résolu
Anonyme
28 mai 2007 à 15:26:07

Bonjour amis zéros :)

Tout d'abord, je m'excuse auprès des modos d'avoir dû créer 2 topics pour un seul problème, mais l'autre était bien trop vaste et imprécis, je l'ai recentré ;)


Alors voilà, créez un fichier test.txt, écrivez dedans abcdef
Ensuite, ouvrez ce fichier texte avec un éditeur hexadécimal et remplacez la 3e lettre par la valeur 1A (en hexadécimal).
Enfin, testez le code suivant:

#include <iostream>
#include <fstream>
int main(void)
{
    std::fstream file;

    file.open("test.txt", std::ios::in);

    while(!file.eof())
        std::cout << file.get() << " " << std::endl;

    file.close();

    return 0;
}


Sortie:

97
98
-1

Process returned 0 (0x0)   execution time : 0.015 s
Press any key to continue.


Voilà le problème: la lecture du fichier s'arrête sur le caractère 1A et je ne sais pas pourquoi.

Merci de votre patience/attention/aide :)
  • Partager sur Facebook
  • Partager sur Twitter
28 mai 2007 à 19:18:07

Ben ptet tout simplement parce que 1A représente la fin du fichier... Essaie en changeant la valeur pour voir ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
28 mai 2007 à 19:35:14

Effectivement, en changeant, ça marche, mais le problème, c'est que j'ai rencontré ce problème dans le cadre d'un programme qui décompresse un GIF, et dans le fichier que j'avais pris pour les tests, il y avait ce caractère, donc j'en déduis qu'il est possible de le rencontrer sans que ce soit la fin du fichier, donc je dois trouver un moyen de contourner ce problème.

En tout cas, merci d'avoir bien voulu te pencher sur mon problème :)

EDIT: problème résolu !!

En fait, il "suffisait" d'ouvrir le fichier en mode binaire en rajoutant le flag std::ios::binary ! Merci quand même ;)
  • Partager sur Facebook
  • Partager sur Twitter
28 mai 2007 à 20:12:15

Dans ce type de fichier, il n'y a pas une en-tête qui indique la taille (en nb d'octets par exemple) ? Si oui, il te suffirait de la récupérer puis de récupérer les caractères un à un jusqu'à la fin, sans tester de eof :) Je sais pas... Bonne chance ^^
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
28 mai 2007 à 20:13:46

master dwarf, merci pour ton aide, mais je viens d'éditer, le problème est réolu :)

Juste pour te rpéondre: j'avais essayé de faire comme ça, mais malheureusement ça ne marchait pas, on aurait dit que le fichier restait "bloqué" sur la dernière valeur avant 1A ... Mais bon...
  • Partager sur Facebook
  • Partager sur Twitter
28 mai 2007 à 20:15:27

ah bon ^^ impec alors ! a+
edit : au fait met le topic en résolu ;)
  • Partager sur Facebook
  • Partager sur Twitter