He creado un paquete de recursos simple para empaquetar los recursos de mi juego en un solo archivo. Todo iba bien hasta que comencé a escribir el desempaquetador. Noté que el archivo .txt - 26 bytes - que había empaquetado, salió bien del archivo de recursos, sin problemas de todos modos, todos los datos conservados. Sin embargo, al leer el archivo .PNG que había empaquetado en el archivo de recursos, los primeros 5 bytes estaban intactos, mientras que el resto se anuló por completo.fread Sólo los primeros 5 bytes del archivo .PNG
Tracé esto hasta el proceso de empaquetado, y noté que fread solo está leyendo los primeros 5 bytes del archivo .PNG y no puedo entender por qué. Incluso desencadena 'EOF' que indica que el archivo tiene solo 5 bytes de largo, cuando de hecho es un PNG de 787 bytes de un pequeño polígono, 100px por 100px.
Incluso probé este problema al hacer una aplicación por separado para simplemente leer este archivo PNG en un búfer, obtengo los mismos resultados y solo se leen 5 bytes.
Aquí está el código de esa pequeña aplicación separada:
#include <cstdio>
int main(int argc, char** argv)
{
char buffer[1024] = { 0 };
FILE* f = fopen("test.png", "r");
fread(buffer, 1, sizeof(buffer), f);
fclose(f); //<- I use a breakpoint here to verify the buffer contents
return 0;
}
Puede alguien señalar mi error estúpido?
¿Por qué no utilizar las transmisiones en C++? – GManNickG
¿Por qué hay un cero entre los corchetes para "buffer"? –
@Billy: para anular el búfer, sé que no es una forma estándar. –