Estoy intentando leer bloques de un archivo y tengo un problema.Uso de búferes para leer desde el archivo de tamaño desconocido
char* inputBuffer = new char[blockSize]
while (inputFile.read(inputBuffer, blockSize)) {
int i = inputFile.gcount();
//Do stuff
}
Supongamos que nuestro tamaño del bloque es 1024 bytes
, y el archivo es 24,3 KiB
. Después de leer el bloque 23, quedará 0,3 KiB
para leer. También quiero leer que 0,3 KiB
, de hecho, uso gcount()
más tarde para que pueda saber cuánto de la memoria intermedia modificó read(...)
(en caso de que sea menor).
Pero cuando accede al bloque 24, read(...)
devuelve un valor tal que el programa no ingresa al bucle, obviamente porque el tamaño de los bytes restantes no leídos en el archivo es menor que el tamaño del búfer. ¿Que debería hacer?
Debe incluir un if (correcto) después de "okay = inputFile.read (...)", por lo que se asegura que el programa nunca funcionará con datos no válidos. Hazlo, así que lo marco como una respuesta aceptada. – Erandros
@Erandos, no, eso no funcionará porque entonces has vuelto al cuadro 1 - ¡no procesarás el último bloque subscrito! En su lugar, quizás agregue if (i), de modo que solo haga cosas si hay datos. –
Tienes razón. Sigo pensando que debería haber un "if (lessThanBufferSizeFlag)". Sin embargo, no sé cómo obtener ese valor de bandera. – Erandros