我实际上想做的是创建一个二维数组,但它是在文件中而不是在主内存中。
为了跳过这个文件,我使用 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);
}