2009-12-20 13 views
14

¿Cómo se obtiene la cantidad de bytes que se leyeron con la función ifstream :: read?ifstream, bytes leídos?

Tell dice que el archivo es de 10 bytes y Windows dice que también tiene 10 bytes, pero solo hay 8 bytes en el archivo, así que cuando lo leo solo lee los 8 bytes, así que termino con un tamaño demasiado grande un amortiguador.

+1

¿Estás seguro de que no tienes una nueva línea al final del archivo (es decir, '\ r \ n' en Windows)? Eso le daría sus dos bytes faltantes. –

+0

Sí, lo probé con fopen, etc. y solo devolvió la lectura de 8 bytes. – user230821

Respuesta

34

Puede encontrarlo llamando al gcount() en una secuencia inmediatamente después de leer.

ifs.read(buf, sizeof buf); 
std::streamsize bytes = ifs.gcount(); 
2

Hay una función llamada readsome(...) que hace lo que quiere:

streamsize readsome (char* s, streamsize n); 

Valor de retorno El número de caracteres extraídos.

+6

'readsome' solo lee desde el búfer de memoria asociado con la secuencia, no necesariamente leerá hasta el final del archivo, incluso si el archivo es lo suficientemente grande. No desea usarlo excepto en circunstancias muy limitadas. – interjay