-1

こんにちは、Unix プラットフォームで C を使用しています。C で最終行の前に 1 行追加する方法を教えてください。追加モードで fopen を使用しましたが、最終行の前に 1 行追加できません。

ファイルの最後の 2 行目に書き込みたいだけです。

4

5 に答える 5

5

ファイル全体を上書きする必要はありません。あなたはただしなければなりません:

  • ファイルを「rw」モードで開き、
  • ファイルを読み取って最後の行を見つけます。その位置 ( ftell/ ftello) をファイルとその内容に保存します。
  • 最終行の先頭に戻る ( fseek/ fseeko)
  • 最後の行の前に好きなことを書いてください
  • 最後の行を書きます。
  • ファイルを閉じます。
于 2009-12-17T09:58:16.687 に答える
2

これを標準 C で直接行う方法はありません。これは主に、この操作をサポートするファイル システムがほとんどないためです。これを回避する最も簡単な方法は、ファイルをメモリ内構造体 (おそらくどこにでもある場所) に読み込み、メモリ内に行を挿入してから、構造体全体を再度書き込んで、元のファイルを上書きすることです。

于 2009-12-17T09:40:53.923 に答える
1

fseekファイルの最後にジャンプし、改行に遭遇するまで逆方向に読むために使用します。次に、行を挿入します。読み込んでいる「最後の行」を保存するには、逆方向に読み込んでいる文字数を数えてから、適切に割り当てられたバッファーに strncpy します。

于 2009-12-17T10:00:37.563 に答える
1

最後の行が終了する場所を見つけ、最後の行をメモリに読み込み、その場所に戻って新しい行を書き込み、次に最後の行を書き込むことができます。

場所を見つけるには: 最後までシークし、バッファー サイズを差し引いた値を求めます。バッファーを読み取り、改行を探します。見つからない場合は、2 つのバッファー サイズを逆方向にシークし、再試行します。

には r+ モードを使用する必要がありますfopen

ああ、テキスト モードとバイナリ モードには注意が必要です。テキストモードではジャンプ位置を計算できないため、バイナリモードを使用する必要があります.から取得した場所にしかジャンプできませんftell. ファイル全体を読み取り、各行の先頭で呼び出すことで、これを回避できますftell。大きなファイルの場合、それは遅くなります。

于 2009-12-17T09:54:08.643 に答える
1

Append は最後にのみ追加し、途中には追加しません。

ファイル全体を読み込んでから、新しいファイルに書き出す必要があります。後ろから始めて、最後から 2 番目の改行のバイト オフセットを見つけることができるかもしれません。次に、「プレリュード」全体をブロック書き込みし、新しい行を追加してから、残りのトレーラーを出力します。

于 2009-12-17T09:39:28.243 に答える