重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

環境はWIN98 VC++6.0 MFCです。

見よう見真似で以下のようにしたら、配列のデータがXXX.txtファイルに保存されました。

それじゃってことで、XXX.txtファイルからデータを取り出し、元通りに配列aa[n]に格納するにはどうすれば良いのですか?

そう言うことはやれるのですか?

void CAbcDlg::OnButton4()
{
 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
 CStringstr;
 LPTSTRpszBuf;
 longsize;

  CFilefpw( "XXX.txt", CFile::modeCreate | CFile::modeWrite | CFile::shareExclusive );

  for(n=0;n<10;n++){
  str=aa[n];
  size = str.GetLength();

  fpw.Write( &size, sizeof( long ) );
  //バッファの確保
  pszBuf = str.GetBuffer( size );
  //書き込み
  fpw.Write( pszBuf, size );
  //バッファの開放
  str.ReleaseBuffer();

 }
}

A 回答 (3件)

Write を Read に変えればOK



modeCreate | modeWrite → modeRead

fpw.Read( &size, sizeof(long) );

pszBuf = str.GetBuffer( size );

fpw.Read( pszBuf, size );

てな感じで。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

うまくいきました。

<補足>
参考に別途分かったことを書いておきます。

void save() {
CFile file(ファイル名, CFile::modeWrite|CFile::modeCreate);
CArchive ar(&file, CArchive ::store);
for (int i = 0; i < 10; i++) {
ar << aaa[i];
}
}

void load() {
CFile file(ファイル名, CFile::modeRead);
CArchive ar(&file, CArchive ::load);
for (int i = 0; i < 10; i++) {
ar >> aaa[i];
}
}

お礼日時:2003/11/25 20:02

#2です。



↓忘れると'\0'つかねぇや(^^;

str.ReleaseBuffer( size );
    • good
    • 0

文字列長と文字列を書き込んでいるわけですから,


読み込むときは,まず文字列の長さを読み込み,続いてその長さの分だけ文字列を読み込むことになります。
これをファイルの終端まで繰り返せばいいです。
読み込みには CFile::Read を使ってください。

ただ,拡張子 txt のファイルに文字列長をバイナリで書き込むのはあまりよろしくないと思います。

配列の各要素を1行に書き出していくほうがいいのではないかと。
この場合読み込むときは1行ずつ読み込んで配列に入れていくことになります。
この方法にするなら,MFC の CStdioFile や C++ 標準ライブラリの fstream などを使ってください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

アドバイスを参考に色々調べてみます。

お礼日時:2003/11/25 19:59

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