我有一個讀取.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