Je développe une application sous windows, et j'utilise fstreams pour lire et écrire dans le fichier.C++ iostream ne définit pas eof bit même si gcount renvoie 0
J'écris avec fstream ouvert comme celui-ci:
fs.open(this->filename.c_str(), std::ios::in|std::ios::out|std::ios::binary);
et l'écriture avec cette commande
fs.write(reinterpret_cast<char*>(&e.element), sizeof(T));
fermer le fichier après chaque écriture avec
fs.close()
lecture avec ifstream ouvert comme ceci:
is.open(filename, std::ios::in);
et la lecture avec cette commande:
is.read(reinterpret_cast<char*>(&e.element), sizeof(T));
L'écriture va bien. Cependant, je l'ai lu dans une boucle de cette façon:
while(!is.eof())
{
is.read(reinterpret_cast<char*>(&e.element), sizeof(T));
}
et le programme continue à lire, même si la fin du fichier doit être atteint. istellg pos est 0, et gcount est égal à 0, mais le bit fail et le bit eof sont tous deux ok.
Je suis en fou sur cela, besoin d'aide ...
"le bit de défaillance et le bit eof sont tous deux corrects" - par ceci voulez-vous dire qu'ils sont définis ou non? –
N'utilisez jamais eof() - jetez un oeil à http://punchlet.wordpress.com/2009/12/01/hello-world pour une perspective alternative. –
Merci neil c'est interressant, mais je pense que je comptais en effet sur le comportement attendu, et cela ne fonctionne toujours pas. En effet, après la dernière lecture, le curseur devrait être positionné sur le 1028ème octet. Puisque le fichier est de 1028 octets, c'est EOF. Mais ça ne marche pas. J'aimerais vraiment savoir pourquoi –