• ベストアンサー

gccコンパイラのプログラムでファイルの特定行削除をしたい

初心者な質問で申し訳ありません。。 Linuxでプログラムの勉強をしています。 その中でファイルにデータを書込み、 あとでそこを検索してその行を削除するというプログラムを作成しており、そのためのCの関数リファレンスやいくつか書籍を調べてみたのですが、 ファイルから特定の行を削除するという具体的な方法を見つけることができませんでした。 今のところ現実的なのは 1.特定の行より前の行までを別のファイルに書き出し。(コピー) 2.特定の行より後ろの行以降を別のファイルに書き出し(コピー) 3.コピー元のファイルを削除する。 4.コピーしたファイルを3.で削除した名前に変える。 なのですが、これ以外の方法をご存知の方、御教授いただけますでしょうか? なお、Qtの勉強もかねてなのでコンパイラはgcc限定としております。

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

  • ベストアンサー
  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.2

1)作業領域が充分に取れるのなら  ファイルを全部メモリーに読み込み特定の行を除いて上書きする。 2)読み込み位置と書き込み位置を記憶して  読み込み位置にseekして読み込み、書き込み位置にseekして書き込みを繰り返せば1行削除できる。  ファイルI/Oバッファが有効に働いていれば物理的な負荷は意外と小さいかも。

nuno0920
質問者

補足

回答ありがとうございました。 補足させていただきますと、 1)は最終手段で考えています。 結構ファイルサイズが大きくなりそうなので・・・ 2)ですが、これはこの処理を繰り返した場合最後の行がどのようになるのかを お伺いしたいのですが。 (例えば先頭から2番目の行を1番目に書いていくという形であれば、最後の行は余ってしまうのかなと)

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

> 具体的な方法を見つけることができませんでした。 現実的でわかりやすい方法をすでに見つけていらっしゃるではないですか。

関連するQ&A