我有一个读取.ASE文件的类,需要将变量存储在二进制文件中,以便下次运行应用程序时能更快地访问。我将我的信息存储在结构中以使写入过程更加简单。这是结构我使用,在标头中定义:定义变量讨厌的错误阅读结构从二进制文件(C++)
struct myMesh{
std::vector<Vector3> vertices;
std::vector<Vector2> uvs;
std::vector<Vector3> normals;
int verticesSize;
int uvsSize;
int normalsSize;
};
我已经创建了这样的一个实例也STRUCT在报头中:
myMesh myInfo;
存储在所述结构中的数据之后变量,我写使用C函数的二进制文件:
std::string path = filename + ".bin";
const char * c = path.c_str();
FILE *pBinaryFile;
pBinaryFile = fopen(c, "wb");
if (pBinaryFile==NULL){
std::cout << "error";
}
fwrite(&myInfo.vertices, sizeof(myInfo), 1, pBinaryFile);
fclose(pBinaryFile);
要测试的二进制正确地创建,我读的文件并创建结构的另一个实例以可视化的数据:
myMesh _myInfo;
FILE *theFile;
theFile = fopen(c, "rb");
if (theFile==NULL){
std::cout << "error";
}
fread(&_myInfo, sizeof(_myInfo), 1, theFile);
fclose(theFile);
这工作正常。当我只尝试读取文件时,只是不使用写入过程出现问题:
/*FILE *pBinaryFile;
pBinaryFile = fopen(c, "wb");
if (pBinaryFile==NULL){
std::cout << "error";
}
fwrite(&myInfo.vertices, sizeof(myInfo), 1, pBinaryFile);
fclose(pBinaryFile);*/
myMesh _myInfo;
FILE *theFile;
theFile = fopen(c, "rb");
if (theFile==NULL){
std::cout << "error";
}
fread(&_myInfo, sizeof(_myInfo), 1, theFile);
fclose(theFile);
现在它不起作用。结构的int变量是正确获取的,但矢量变量以下面的形式出现???有内存错误。我对C++很陌生,这可能是一个愚蠢的问题,但我不明白。我也尝试过ofstream和ifstream的C++函数,并且遇到同样的问题。
在此先感谢。
解决!我一个接一个地存储矢量内容和矢量的大小,而不是矢量本身。现在我可以在不写文件的情况下访问它。 – davidkyoku 2013-04-20 14:00:26