0

私が本質的にやろうとしているのは、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(&gtf, 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(&gtf, 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(&gtf, sizeof(gameTile8File), 1, file1) != 1)
    {
        cout << "read failed! 01\n";
    }
    //then load it
    gtf.load(gt, file1, file2);
}
4

1 に答える 1

1

あなたの問題はそれfseek()がバイト単位のオフセットを取ることだと思います。sizeof(gameTile8File)オフセットに:を掛ける必要があります。

fseek(file1, sizeof(gameTile8File)*(y * worldTileKey::gameWorldSizeX*worldTile::worldTileCountX + x), SEEK_SET))

の使用方法がわかりませんworldTileKey::gameWorldSizeX*worldTile::worldTileCountXworldTileKey::gameWorldSizeX*worldTile::worldTileCountXファイルタイルに保存しているグリッドの幅は広いですか?

于 2012-08-08T17:47:18.737 に答える