• ベストアンサー

ファイルの途中に文字列を挿入

こんにちは。プログラミング初心者で、初めて質問させていただきます。勉強中に思ったのですが、 ファイルの書き込みについてなのですが、あるファイルに既にデータがあり、その先頭部分(あるいは途中)にある文字列を追加挿入しなければならなくなった場合どういった処理をすることになるのでしょうが? fseekなどで場所を指定して書き込んでしまうと、そこの文字列が上書きされてしまうと思うのですが。

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

・簡単なやり方 新しいファイルを作って、挿入位置より前のデータを元ファイルからコピー、挿入データを追記、挿入位置より後のデータを元ファイルからコピーする。元ファイルを消して新しいファイルをリネームすれば完了。 ・上記では空きディスク容量が足りないとき 挿入位置より後のデータを挿入データ分だけ後ろに移動して空いた位置に挿入データを書き込む。データの移動は上書きしないように後ろから順にコピーするなど手順は面倒だが出来ないことではない。 なお性能は考慮してませんので。後者の方法をとらなければいけないほど大きなファイルなら途中挿入が必要にならないデータ構造の検討から始めるべきでしょう。

bahoo
質問者

お礼

なるほど。後者は特にギミックなやり方ですね。 やはり、データ構造にポイントがあるようなので、その辺の考え方も勉強していこうと思います。 ありがとうございました。

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

可能であるなら、ファイルへの書き込みはデータが完成してから一気に書いた方が無難です。 そうしないと、中途半端にファイルに書き込んでから、途中でエラーや例外が発生した場合に、いろいろと面倒が起こります。 データが完成してからなら、I/Oエラー以外で中途半端なファイルができる可能性はありません。 もちろん、今回のように途中にデータを挿入したり、一部分を削除することも、メモリ上で行えば簡単です。

bahoo
質問者

お礼

ありがとうございます。 そうですよね。そういえばソフトを使ってファイル開くとその文だけメモリも食っているので、いったん全部も見込んで処理しているのですよね。

回答No.1

全部はじめから読み込んで、必要なところにデータを追加して、別のファイル名で書き戻します。後は、必要なら元のファイル名を変更するか削除し、変更したファイル名を元のものに変更します。 全部読み込むことがストレスとなるようなファイルの場合は、ランダムファイル等のデータ構造を考える必要があるでしょう。

bahoo
質問者

お礼

なるほど、やっぱりすべて新しいものに移すのですね。 結構ストレスのかかるものなので、何か技があるのかと思いましたが、その技はデータ構造の検討にあるようですね。 これからデータ構造を考えるような勉強もしていこうと思います。 ありがとうございました。

関連するQ&A