c++ - tutorial - ¿Qué hay de malo con la búsqueda ifstream?
open ifstream (2)
Estoy tratando de hacer una búsqueda y releer los datos. pero el código falla
El codigo es
std::ifstream ifs (filename.c_str(), std::ifstream::in | std::ifstream::binary);
std::streampos pos = ifs.tellg();
std::cout <<" Current pos: " << pos << std::endl;
// read the string
std::string str;
ifs >> str;
std::cout << "str: " << str << std::endl;
std::cout <<" Current pos: " <<ifs.tellg() << std::endl;
// seek to the old position
ifs.seekg(pos);
std::cout <<" Current pos: " <<ifs.tellg() << std::endl;
// re-read the string
std::string str2;
ifs >> str2;
std::cout << "str2: (" << str2.size() << ") " << str2 << std::endl;
std::cout <<" Current pos: " <<ifs.tellg() << std::endl;
Mi archivo de prueba de entrada es
qwe
La salida fue
Current pos: 0
str: qwe
Current pos: 3
Current pos: 0
str2: (0)
Current pos: -1
¿Alguien puede decirme que está mal?
Cuando ifs >> str;
termina porque se llega al final del archivo, establece el eofbit.
Hasta que C ++ 11, seekg()
no pudo buscar fuera del final de la secuencia (nota: la suya sí lo hace, ya que la salida es Current pos: 0
, pero eso no es exactamente conforme: debe fallar la búsqueda o debe borrarse el eofbit y buscar).
De cualquier manera, para evitar eso, puede ejecutar ifs.clear();
antes de ifs.seekg(pos);
Parece que al leer los caracteres está golpeando el EOF y marcando eso en el estado de transmisión. El estado del flujo no cambia cuando se realiza la llamada de búsqueda () y, por lo tanto, la siguiente lectura detecta que el bit EOF se establece y regresa sin leer.