- ベストアンサー
CFileの使い方を教えてください
環境はWIN98 VC++6.0 MFCです。 見よう見真似で以下のようにしたら、配列のデータがXXX.txtファイルに保存されました。 それじゃってことで、XXX.txtファイルからデータを取り出し、元通りに配列aa[n]に格納するにはどうすれば良いのですか? そう言うことはやれるのですか? void CAbcDlg::OnButton4() { // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください CString str; LPTSTR pszBuf; long size; CFile fpw( "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(); } }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Write を Read に変えればOK modeCreate | modeWrite → modeRead fpw.Read( &size, sizeof(long) ); pszBuf = str.GetBuffer( size ); fpw.Read( pszBuf, size ); てな感じで。
その他の回答 (2)
- NUNUNUNUNU
- ベストアンサー率55% (11/20)
#2です。 ↓忘れると'\0'つかねぇや(^^; str.ReleaseBuffer( size );
文字列長と文字列を書き込んでいるわけですから, 読み込むときは,まず文字列の長さを読み込み,続いてその長さの分だけ文字列を読み込むことになります。 これをファイルの終端まで繰り返せばいいです。 読み込みには CFile::Read を使ってください。 ただ,拡張子 txt のファイルに文字列長をバイナリで書き込むのはあまりよろしくないと思います。 配列の各要素を1行に書き出していくほうがいいのではないかと。 この場合読み込むときは1行ずつ読み込んで配列に入れていくことになります。 この方法にするなら,MFC の CStdioFile や C++ 標準ライブラリの fstream などを使ってください。
お礼
回答ありがとうございます。 アドバイスを参考に色々調べてみます。
お礼
回答ありがとうございます。 うまくいきました。 <補足> 参考に別途分かったことを書いておきます。 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]; } }