• 締切済み

CFile Openで開いたファイルに書き込み場所をしていしてWriteする

現在、ファイルに書込む処理を施しています。 現在、以下のようなところまでいきました。 CFile file; file.Open(ファイルのフルパス, 書込みモードで開く); block bc; // グローバルで宣言した構造体 /* なお、この中には struct block { int x; int y; }; */ があります。 そして、それを bc.x = 1; // '1'は例 bc.y = 1; // 同上 とするのですが、これではどのファイルに書き込むか、ということがわからないのでイメージとしては file.bc.x(y)としたいです。 こうするにはどうすればよいのでしょうか? ご教授のほどよろしくお願いいたします。

みんなの回答

回答No.4

 こんにちは。  要するにMFCのCFileクラスを作成し、fileインスタンスに対して、  CFile file;  file.x = 1;  file.y = 1;  見たいに、block構造体と同じメンバ操作をしたいのでしょうか。  一応CFileの下にあるCMemFileクラスが、メモリを扱えますが、此れだけでは使い物にならないので、このクラスか、CFileクラスをオーバーライド(または包含)して  http://msdn.microsoft.com/ja-jp/library/tzdxd4x0(VS.80).aspx  以下のオペレータ  block* operator->()  block& operator*()  operator block&()    辺りをオーバーロードするしか無いかも知れません。

すると、全ての回答が全文表示されます。
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

出力をどのようにしたいのでしょう 1) テキストファイルとして出力したいのか 2) 構造体のメンバーをバイナリ形式で出力したいのか 1)なら sprintfなどで文字列に整形してから Writeで出力 2)なら Writeに構造体のアドレスを渡して出力 1) ... TCHAR chBuf[256]; sprintf( chBuf, "%8d %8d", bc,x, bc,y ); file.Write( chBuf, sizeof( chBuf ) ); 2) ... file.Write( &bc, sizeof( bc ) ); 指定位置ということなら file.Seekで書き込み単位ごとの位置指定をすればいいでしょう 5レコード目に書き込むなら 1)の場合 file.Sheek( 5 * sizeof( chBuf ), CFile::begin ); 2)の場合 file.Seek( 5 * sizeof( bc ), CFile::begin ); といった具合になります

すると、全ての回答が全文表示されます。
  • hidebun
  • ベストアンサー率50% (92/181)
回答No.2

構造体データを書き込むのでしたら、 ファイルをバイナリモードで読み書きする必要があります。 fopen, fwrite, freadで読み書きしてはいかがでしょうか?

参考URL:
http://homepage3.nifty.com/mmgames/c_guide/17-02.html
すると、全ての回答が全文表示されます。
  • hidebun
  • ベストアンサー率50% (92/181)
回答No.1

> file.bc.x(y)としたいです。 あなたのイメージがよくわかりません。 要するにどういうことなのですか? ファイルにbcの内容を書き込みたいということですか?

kuwake0_0
質問者

補足

補足要求ありがとうございます。 はい、file内にbcの内容を書き込みたい、ということであってます。 よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A