我已經經歷了幾個小時的時間,試圖解決二進制文件操作的問題。用二進制文件讀寫對象
的任務是讀取和寫入BookStoreBook對象到/從二進制文件
的BookStoreBook類包含以下成員變量:
string isbn;
string title;
Author author;
string publisher;
Date dateAdded;
int quantityOnHand;
double wholesaleCost;
double retailPrice;
爲看書代碼如圖所示:
fstream file("inventory.txt", ios::binary | ios::in | ios::out);
vector<BookStoreBook> books:
BookStoreBook *book = (BookStoreBook *)new char[sizeof(BookStoreBook)];
file.read((char*)book, sizeof(BookStoreBook));
while (!file.eof())
{
books.push_back(*book);
file.read((char*)book, sizeof(BookStoreBook));
}
爲寫書的代碼如下所示:
vector<BookStoreBook> writeBooks = library.getBooks(); //library contains books
file.close();
file.open("inventory.txt", ios::out | ios::binary);
for(int i = 0; i < writeBooks.size(); i++)
{
BookStoreBook *book = (BookStoreBook *)new char[sizeof(BookStoreBook)];
book = &writeBooks[i];
file.write((char*)book, sizeof(BookStoreBook));
file.clear();
}
file.clear();
file.close();
我不想任何字符串轉換爲c_str(),因爲這是在分配要求禁止。
一些注意事項:
權當我運行該程序,該程序會嘗試從文件中讀取書, 那就是當我們得到一個Windows錯誤窗口,後來當我調試,我得到的以下消息:在0x56b3caa4(msvcr100d.dll) 未處理異常FinalProject.exe:0000005:訪問衝突讀取位置0x0084ef10
有趣的是,有時在程序運行完全正常,並且 有時它崩潰時,它首先讀取文件中的書籍。
但是,無論何時程序成功讀取了一些內容,並且 我不修改書籍,然後重新打開該程序,該程序就保持 完美運行。
似乎沒有任何工作。請幫忙!
你想在調試器中運行你的程序。 –
當您的方法序列化指針時,您將序列化指針本身,但不是指向的內容。這就是這裏發生的事情,如果'string'意味着'std :: string'。 –
實際上,我通過visual studio debuger得到了這個錯誤信息 – STIG