私が本質的にやろうとしているのは、2D 配列を作成することですが、それはメイン メモリではなくファイルにあります。
このファイルをジャンプするために、fseek を使用してから fread を使用して、使用している構造に必要なものを返します。問題はloadTile()
、構造内のファイルから読み取ると、gameTile8File gtf
ジャンク データのように見えるものがいっぱいになることです。
書き込みと読み取りの間で、ファイルが閉じられたりフラッシュされたりすることは決してないことに注意してください。それが違いを生むとは思わないでください。ファイルはバイナリで、常に options で開かれます"r+b"
。
の戻り値を確認していますがfseek()
、全員が問題ないfread()
とfwrite()
言っています。
void saveTile(gameTile8& gt, unsigned int x, unsigned int y, bool newFile)
{
//the given coordinates are in world space
//first load the old coordinates (needed so that correct movements in file 2 are made)
if(fseek(file1, (y * worldTileKey::gameWorldSizeX*worldTile::worldTileCountX) + x, SEEK_SET))
{
cout << "fseek failed! 01\n";
}
gameTile8File gtf;
fread(>f, sizeof(gameTile8File), 1, file1);
//convert a gameTile8 to a gameTile8File
gtf.save(gt, file2, newFile);
//once all movements are done then save the tile
if(fseek(file1, (y * worldTileKey::gameWorldSizeX*worldTile::worldTileCountX) + x, SEEK_SET))
{
cout << "fseek failed! 01\n";
}
if(fwrite(>f, sizeof(gameTile8File), 1, file1) != 1)
{
cout << "fwrite failed! 01\n";
}
}
void loadTile(gameTile8& gt, unsigned int x, unsigned int y)
{
//the given coordinates are in world space
//seek to the given spot load it
if(fseek(file1, (y * worldTileKey::gameWorldSizeX*worldTile::worldTileCountX) + x, SEEK_SET))
{
cout << "fseek failed! 01\n";
}
gameTile8File gtf;
//read in the tile
if(fread(>f, sizeof(gameTile8File), 1, file1) != 1)
{
cout << "read failed! 01\n";
}
//then load it
gtf.load(gt, file1, file2);
}