dポイントプレゼントキャンペーン実施中!

【MFC】CFileでSeekした位置から値出力したい

環境:WindowsXP(SP2)、VisualStudio2005、MFC


CFileの「open」を利用して、ファイルをオープンし、
(この時の指定モードはCFile::modeCreate | CFile::modeNoTruncate | CFile::modeWriteです)

指定した位置にseekし、そこへCFileの「Write」で書き込みを行っています。
Seek位置を「SeekToEnd()」で最後へ移動した際は問題ないのですが、途中へSeekし、書き込みを行った際に、そこから上書きされてしまいます。

「挿入」という形で途中にデータを書き込む方法は無いでしょうか?
※特にMFCにこだわっているわけではないので、何かご存知の方がおられましたらご教授お願いいたしますm(__)m

A 回答 (2件)

ファイルポインタ移動させて直接書いたら当然そのようになります


一旦バッファなどに読み込んだ上でバッファの方を操作
操作したバッファを書き出せば良いのでは?
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございますm(__)m
サイズがかなり大きくなりそうなので、全データをバッファに抱えておくことを考えていないんです(っ記載してなくてすいませんでした)。
そのため何度かに分けてファイルへ出力しているのですが、CFileではなく
fopenとfseekを使えばやりたい事が出来るのでしょうか?
それともCFileを使った時同様に上書きされてしまうのでしょうか?
(fopenでモードを「a:追加」にして、fseekで移動して・・・)
モードaは「最後に追加する」となっているので、やはり無理なのでしょうか???

初心者で文章もぐちゃぐちゃですが・・・
よろしくお願いいたしますm(__)m

お礼日時:2010/06/18 17:00

>やはり無理なのでしょうか???



はい、無理です
ファイル操作の場合、普通のバッファ操作みたいに 挿入 という概念がありませんので
結局一旦読み込んで全データ書き直す必要があります

ファイルサイズが大きくて一気に読めないならテンポラリファイルを使うとか
時間がかかるのを避けたいならスレッドにしてアルゴリズムを考える
等の対処を行う必要があります
    • good
    • 0
この回答へのお礼

初心者の質問にも丁寧に答えていただき、ありがとうございました。
方法を根本から考え直します。

お礼日時:2010/06/21 13:38

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

このQ&Aを見た人はこんなQ&Aも見ています