c++ - good - Problema con EOF cuando se determina el final de la secuencia
ifstream en c++ (1)
No use feof () ni ninguna variante, es tan simple como eso. Desea que de alguna manera se prediga que la próxima lectura fallará, pero eso no es lo que hace, le dice cuál fue el resultado de la lectura ANTERIOR. La forma correcta de leer un archivo es (en pseudocódigo):
while( read( file, buffer ) ) {
do something with buffer
}
En otras palabras, debe probar el resultado de la operación de lectura. Esto es cierto tanto para flujos de C como para iostreams de C ++.
Cuando trato de determinar el final del archivo con la función feof(FILE *)
, me parece que no funciona como esperaba: se requiere una lectura adicional incluso si la transmisión finaliza. por ejemplo, feof(FILE*)
no dirá verdadero si se invoca en un archivo con datos de 10 bytes justo después de leer 10 bytes. Necesito una operación de lectura adicional que, por supuesto, devuelve 0, luego feof(FILE *)
dirá "OK, ahora llega al final".
Mi pregunta es: ¿por qué se necesita una read
más y cómo determinar el final del archivo o cómo saber cuántos bytes quedan en una secuencia de archivos si no quiero el estilo feof
?
Gracias y un saludo.