En C++, ¿hay algún caso en el que std::ifstream open()
sea exitoso, pero std::ifstream good()
puede ser falso?¿Abrió con éxito pero no es bueno?
EDIT: probado con g ++ 4.7.1
#include <iostream>
#include <fstream>
int main(int argc, char *argv[])
{
std::ifstream filestream("testfile");
std::cout<<filestream.good()<<std::endl;
std::cout<<filestream.eof()<<std::endl;
std::cout<<filestream.fail()<<std::endl;
std::cout<<filestream.bad()<<std::endl;
return 0;
}
volverá: 1, 0, 0, 0 para un archivo vacío que significa good = TRUE
y eof = fail = bad = FALSE
. Es normal ?
+1 la implementación en realidad podría no probar el archivo hasta que intente una lectura y esa lectura falle. –
@ DavidRodríguez-dribeas En general, no tiene sentido probar el 'eofbit' hasta que falle una entrada. Y el hecho de que 'std :: ifstream :: good()' pruebe el 'eofbit' (además de los otros bits de estado) lo hace prácticamente inútil. –
No creo que haya ningún * daño * en la persona que pregunta usando 'bueno' ¿hay alguno? Es solo que dado que el 'eofbit' no está configurado, también podrías probar la transmisión de la verdad como siempre. Supongo que hay daño de legibilidad al hacer algo inútilmente anormal, y como dices, casi cualquier uso de "bueno" es inútilmente anormal ... –