- 締切済み
CList, CArchive, CFileの組み合わせ
Bookクラスという自分で定義したクラスのリストをテキストファイルに保存することは成功したのですが、テキストファイルから、データーを取り出そうとすると下記のようなエラーが出ます。 "An attempt was made to access an unnamed file past its end" プログラムの構造はこんな感じです。 class book : public CObject { DECLARE_SERIAL(book) private: ......... public ......... void Serialize (CArchive ar); }; void CAssignment2Dlg::OnButtonSave() { CList bookList; CFile fileBook("book.txt", CFile::modeRead); CArchive archvBook(&fileBook, CArchive::load); bookList.Serialize(archvBook); ... となっているのですが、どうしたらよいのでしょうか?よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- happy_people
- ベストアンサー率30% (25/81)
まずアサーションの内容を確認しましょう。 "Debug Assertion Failed"のメッセージボックスで真中のボタン(再試行?)を押すと、デバッガが「ASSERT(・・・)」と書かれた行に飛んでくれるはず。ASSERTの中の条件式は真(TRUE)になっていないといけない。でも、実行してみたら偽(FALSE)だった、というときに"Debug Assertion Failed"のメッセージボックスが出ます。 そのへんから、何がまずかったのか割り出してみてください。
- happy_people
- ベストアンサー率30% (25/81)
テキストファイルに保存する処理に成功したのであれば、その逆順で復元できませんか?普通に考えればそれだけなのですが。。。 MFCのSerializeは基本的にバイナリでの保存・復元を想定していますよね。 テキストファイルへの保存もSerializeで行ったのでしょうか? それとも、保存した情報では、復元に必要な情報が不足しているとか。。。
補足
回答ありがとうございます。 保存する時はOncmdSaveという関数を呼び、 CFile fileBook("book.txt", CFile::modeWrite); CArchive archvBook(&fileBook, CArchive::store); bookList.Serialize(archvBook); を実行します。テキストファイルに何かが書かれていたの で、成功したものとみています。 復元にはOnInitDialogからLrdData()という関数呼び、 CFile fileBook("book.txt", CFile::modeRead); CArchive archvBook(&fileBook, CArchive::load); bookList.Serialize(archvBook); を実行します。 コンパイラーは問題なく通るのですが、プログラム自体を 実行しようとすると、"Debug Assertion Failed"という警 告のMsgBoxがでます。どうすればよいのでしょうか…。