la lecture des octets avec ifstream
Je suis relativement novice en c++, et avoir quelques problèmes avec ifstream. Tout ce que je veux faire est de lire le fichier octet par octet, cependant, la lecture échoue toujours dans le milieu du fichier. Mon code:
void read(ifstream&f)
{
unsigned char b;
for (int i=0;;++i)
{
if(!f.good())
{
cout<<endl<<"error at: "<<i;
return;
}
f>>b; //b=f.get(); and f.read(&b, 1); doesnt work either
cout<<b;
/* ... */
}
}
Il lit la première quelques centaines d'octets correctement, puis le reste du fichier est ignoré. Quelque chose de mal à propos de tampon? Qu'ai-je fait de mal?
EDIT:
Je viens de découvrir quelque chose qui pourrait être la cause: dans le fichier j'utilise CRLF les fins de ligne (2 octets), mais toutes les méthodes ci-dessus, revenir à LF, donc à la fin de chaque ligne i est incresed par un seul, cependant, il ya 2 octets dans le fichier. Donc ma question est: comment puis-je obtenir à la fois CR et LF séparément?
cout << b
peut ne pas s'imprimer quelques-uns des personnages, s'ils ne sont pas des caractères imprimables.Le fichier ne contient que des caractères imprimables.
Si le fichier contient uniquement des caractères imprimables (et pas de '\0') je ne suis pas sûr que le problème est. Pouvez-vous poster le fichier quelque part, ou d'un extrait du fichier qui présente le problème?
Définir la lecture échoue toujours.
OriginalL'auteur Dave | 2012-06-22
Vous devez vous connecter pour publier un commentaire.
essayer
Les deux
<<
etget()
sont destinés à texte, pas de données binaires.pourriez-vous nous donner un minimum de fichier qui provoque l'erreur? Merci aussi de nous montrer comment vous préparer le
ifstream
.Êtes-vous d'ouvrir le flux en mode binaire? (Si vous ne l'êtes pas, vous devriez être.)
OriginalL'auteur Beta
J'ai finalement obtenu de travail en ouvrant le fichier en mode binaire (merci Alex pour attiré mon attention).
Semble que le caractère CR bousille les deux ifstream et cout, qui a causé ma confusion, je vais garder cela à l'esprit.
Je pense que j'ai clairement fait savoir à la fois dans ma question de modifier et de dans un commentaire sous le Bêta de la réponse, que cette solution ne fonctionne pas. Merci de lire plus attentivement la prochaine fois.
OriginalL'auteur Dave