write tutorial read open myfile c++ ifstream seekg

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.