アプリ版:「スタンプのみでお礼する」機能のリリースについて

VC++6.0でMFCを使ってのCSVファイル入力を検討しています。
シリアライズ関数内でReadStringを使って1行づつ入力しているのですが、ファイル終端に達した後の処理として、もう一度ファイル先頭から読み直しをしたいのですが、うまくいきません。どうすれば、読み直しができるのでしょうか?
処理の流れは次のようにしました。
void CDispDoc::Serialize(CArchive& ar)
{
CStringline;
if (ar.IsStoring())
{
}
else
{
while(ar.ReadString (line)) {   何かの処理  }
//whileを出たところでファイル先頭からの読み直しをしたい

次の2点を試したのですが、うまくいきません。
(1)ファイルポインタを戻してから入力する。
CFile* fp = ar.GetFile ();
fp->SeekToBegin ();
ar.ReadString (line);//この方法ではFalseが戻る

(2)新たなArchiveオブジェクト作って使う。
CFiletheFile(ar.GetFile()->GetFilePath (), CFile::modeRead);
CArchive arc(&theFile, CArchive::load);
arc.ReadString (line);//この方法では共有違反と言われる

ReadStringでは読み直しができないのでしょうか?

A 回答 (1件)

共有違反はCDocuemntクラスのOnOpenDocument関数で


CFile::shareDenyWriteで開いているためだと思われます

Serializeの引数 arかCFileオブジェクトを取得してこのファイルオブジェクトを操作してからCArchiveを再構築するといった手順でしょう

CFile* pFile = ar.GetFile();
pFile->SeekToBegin();
CArchive arc( pFile, CARchive::load );
arc.ReadString( line );
arc.Close();

といった具合です
    • good
    • 0
この回答へのお礼

判りました、
新たに作るのは、CArchiveオブジェクトだけで良かったのですね。
おかげさまで解決しました。ありがとうございました。m(_ _)m

お礼日時:2008/02/11 20:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!