[VC++ 6.0]
J'utilise des fichiers binaires ouverts par Createfile() et dont les accés se font par des ReadFile() et WriteFile().
Comment détecter la fin du fichier (EOF) ?
Il doit bien exister une fonction pour cela !
Merci.
[VC++ 6.0]
J'utilise des fichiers binaires ouverts par Createfile() et dont les accés se font par des ReadFile() et WriteFile().
Comment détecter la fin du fichier (EOF) ?
Il doit bien exister une fonction pour cela !
Merci.
salut,
je dirais en testant la si la lecture échoue ,
ou en regardant avant la taille du fichier,
néanmoins si tu utilise les MFC la classe CFile est plus adaptée ,elle utilise directement les api writefile ,readfile etc...
(voir CFile::GetLength ou CFile::SeekToEnd ).
en api 32 pour la taille:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DWORD dwNew = ::SetFilePointer(hFile, 0L, NULL,(DWORD)FILE_END);![]()
En fait si la lecture échoue on ne sait pas si c'est parce l'on est en fin de fichier ou problème autre !
trop fort!
Donc pas de fonction Eof(handle) ....![]()
il faut regarder GetLastError() ..
![]()
Je suis allé voir les (milliers) de messages retournés par GetLastError(), pas trouvé ce que je voulais. Je crois que je vais devoir insister !
Ben finalement en insistant, je viens de trouver un ERROR_HANDLE_EOF, que de ce pas je vasi tester ...
merci encore.
FormatMessage()...
En fait, aprés test même si la fin du fichier est atteinte aucune erreur de ressort aprés une lecture.
Je teste le nombre d'octets lus indiqué par la commande readFile() pour repérer la fin du fichier, même si personnellement je n'aime pas trop cette méthode. Je trouve fort que l'on n'ai aps un moyen de repérer la fin de fichier alors que cela existe dans les autres langages..
Mais bon c'est du C++, pourquoi faire simple, quant on peu faire compliqué !
Sous Win32, tu as toujours GetFileSize()...
Ca ne sert à rien d'utiliser GetFileSize, la bonne méthode est de boucler avec comme condition de sortie le retour de readfile différent du nombre d'octet à lire.Envoyé par Médinoc
On peut meme pourquoi pas inclure une verification de GetLastError dans la condition si vraiment on veut etre sur de tout controler, mais utiliser GetFileSize revient à lire à l'ancienne, octet par octet, en faisant une boucle avec un compteur qui s'incrémente tant qu'on a pas atteint le résultat de GetFileSize, c'est contre productif
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while (ReadFile(...)) { }
Mais puisque tu es dans le forum MFC, comme dit Farscape, autant utiliser les classes MFC prévu pour, comme CFile
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager