こんにちは、Unix プラットフォームで C を使用しています。C で最終行の前に 1 行追加する方法を教えてください。追加モードで fopen を使用しましたが、最終行の前に 1 行追加できません。
ファイルの最後の 2 行目に書き込みたいだけです。
ファイル全体を上書きする必要はありません。あなたはただしなければなりません:
ftell
/ ftello
) をファイルとその内容に保存します。fseek
/ fseeko
)これを標準 C で直接行う方法はありません。これは主に、この操作をサポートするファイル システムがほとんどないためです。これを回避する最も簡単な方法は、ファイルをメモリ内構造体 (おそらくどこにでもある場所) に読み込み、メモリ内に行を挿入してから、構造体全体を再度書き込んで、元のファイルを上書きすることです。
fseek
ファイルの最後にジャンプし、改行に遭遇するまで逆方向に読むために使用します。次に、行を挿入します。読み込んでいる「最後の行」を保存するには、逆方向に読み込んでいる文字数を数えてから、適切に割り当てられたバッファーに strncpy します。
最後の行が終了する場所を見つけ、最後の行をメモリに読み込み、その場所に戻って新しい行を書き込み、次に最後の行を書き込むことができます。
場所を見つけるには: 最後までシークし、バッファー サイズを差し引いた値を求めます。バッファーを読み取り、改行を探します。見つからない場合は、2 つのバッファー サイズを逆方向にシークし、再試行します。
には r+ モードを使用する必要がありますfopen
。
ああ、テキスト モードとバイナリ モードには注意が必要です。テキストモードではジャンプ位置を計算できないため、バイナリモードを使用する必要があります.から取得した場所にしかジャンプできませんftell
. ファイル全体を読み取り、各行の先頭で呼び出すことで、これを回避できますftell
。大きなファイルの場合、それは遅くなります。
Append は最後にのみ追加し、途中には追加しません。
ファイル全体を読み込んでから、新しいファイルに書き出す必要があります。後ろから始めて、最後から 2 番目の改行のバイト オフセットを見つけることができるかもしれません。次に、「プレリュード」全体をブロック書き込みし、新しい行を追加してから、残りのトレーラーを出力します。