ゲームのリソースを1つのファイルにパックするためのシンプルなリソースパッカーを作成しました。私がアンパッカーを書き始めるまで、すべてが順調に進んでいました。パックした.txtファイル(26バイト)がリソースファイルから正常に出力され、問題なくすべてのデータが保持されていることに気付きました。ただし、リソースファイルにパックした.PNGファイルを読み取ると、最初の5バイトはそのままで、残りは完全に無効になりました。
これをパッキングプロセスまでたどると、freadが.PNGファイルの最初の5バイトしか読み取っていないことに気付き、その理由を一生理解できません。ファイルの長さがわずか5バイトであることを示す「EOF」もトリガーされますが、実際には、100ピクセル×100ピクセルの小さなポリゴンの787バイトのPNGです。
この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;
}
誰かが私の愚かな間違いを指摘してもらえますか?