Я создал простой пакет ресурсов для упаковки ресурсов для своей игры в один файл. Все шло хорошо, пока я не начал писать распаковщик. Я заметил, что файл .txt - 26 байт - что я упаковал, вышел из файла ресурсов в порядке, без каких-либо проблем, все данные сохранены. Однако при чтении файла .PNG, который я упаковал в файле ресурсов, первые 5 байтов были неповрежденными, а остальные были полностью аннулированы.fread Только первые 5 байт файла .PNG
Я проследил это до процесса упаковки, и я заметил, что fread только считывает первые 5 байтов файла .PNG, и я не могу на всю жизнь понять, почему. Он даже запускает «EOF», указывающий, что файл имеет длину всего 5 байтов, а на самом деле это 787 байт PNG небольшого полигона, 100 пикселей на 100 пикселей.
Я даже протестировал эту проблему, создав отдельное приложение, чтобы просто прочитать этот файл PNG в буфер, я получаю те же результаты и читаю только 5 байтов.
Вот код этого небольшого отдельного приложения:
#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;
}
Может кто-нибудь, пожалуйста, указать на мою глупую ошибку?
Почему бы не использовать потоки C++? – GManNickG
Почему существует нуль между скобками для «буфера»? –
@Billy: Чтобы аннулировать буфер, я знаю, что это не стандартный способ. –