提问人:BigAgg 提问时间:11/16/2022 更新时间:11/16/2022 访问量:378
C++ 将结构保存并加载到文件中
c++ save and load structures to file
问:
我目前正在处理一个游戏项目,我正在将一个包含游戏对象所有所需值的结构保存到一个文件中。保存是完全可以的,但是如果我开始加载它们,它只会加载其中的前 25 个。
之后,我尝试使用加载对象,直到最后一个对象没有得到正确的类型并脱离循环。这工作得很好,但可能不是最优雅的解决方案。while (true)
using namespace std;
struct{
const char* type;
int sizeW;
int sizeH;
int collisionLayer;
int textureID;
int positionX;
int positionY;
} loadStruct;
ifstream fileObj;
fileObj.open("level.txt");
if (fileObj.is_open()){
while (!fileObj.eof()){
fileObj.read((char*)&loadStruct, sizeof(loadStruct));
// creating my object out of loadStruct -> working fine
}
fileObj.close();
}
我试图删除对 eof() 的检查,如果发现错误,只需在 while 循环中放置一个 try/catch 爆发,但这个想法并不是最优雅的,并且在 100% 的时间里都不起作用。
答:
1赞
BigAgg
11/16/2022
#1
感谢您将我“指向”char* 类型......这是导致它失败的严重问题。现在我重新设计了它,也摆脱了 .eof(),只需检查我的类型是否被写入。
using namespace std;
struct {
char type[20];
int sizeW;
int sizeH;
int collisionLayer;
int textureID;
int positionX;
int positionY;
} loadStruct;
bool reading = true;
ifstream fileObj;
fileObj.open(filename);
if (fileObj.is_open()){
while (reading){
string str = "empty";
strcpy(loadStruct.type, "empty");
fileObj.read((char*)&loadStruct, sizeof(loadStruct));
if (loadStruct.type == str){
reading = false;
break;
}
}
}
fileObj.close();
评论
0赞
user4581301
11/16/2022
应该可以解决您在短期内遇到的大多数问题,但要小心! 更改不同平台上的大小。只有最小大小 16 位'是保证的。通常您会看到 32 位 int,有时会看到 64 位,但您需要小心文件是否会被不同的平台读取。您还必须注意字节序、字节顺序的变化。int
评论
const char*
write