Lecture binaire istream byte by byte

Je tente de lire un fichier binaire octet par octet à l'aide d'un ifstream. J'ai utilisé istream méthodes get() avant de lire l'intégralité des morceaux d'un fichier binaire à la fois sans problème. Mais ma tâche actuelle se prête à aller octet par octet et en s'appuyant sur la mise en tampon de l'oi-système pour le rendre efficace. Le problème est que je semble atteindre la fin du fichier de quelques octets plus tôt que je ne l'. J'ai donc écrit le programme de test suivant:

#include <iostream>
#include <fstream>

int main() {
    typedef unsigned char uint8;
    std::ifstream source("test.dat", std::ios_base::binary);
    while (source) {
        std::ios::pos_type before = source.tellg();
        uint8 x;
        source >> x;
        std::ios::pos_type after = source.tellg();
        std::cout << before << ' ' << static_cast<int>(x) << ' '
                  << after << std::endl;
    }
    return 0;
}

Ce vide le contenu du test.dat, un octet par ligne, montrant la position dans le fichier avant et après.

Bien sûr, si mon fichier arrive à avoir les deux octets de la séquence 0x0D-0x0A (ce qui correspond à un retour chariot et saut de ligne), ces octets sont ignorés.

  • J'ai ouvert le flux en mode binaire. Ne devrait pas l'empêcher d'interprétation de la ligne de séparateurs?
  • Faire l'extraction des opérateurs de toujours utiliser le mode texte?
  • Quelle est la bonne façon de lire octet par octet binaire, istream?

MSVC++ 2008 sur Windows.

source d'informationauteur Adrian McCarthy