- ベストアンサー
[c言語] fopenでの追記
c言語についてです。 すでにあるテキストファイルに追記したい場合、ファイルの一番下の行から追記されてしまうのですが、 最初から追記ができるようにするにはどうすればいいのですか。 ※ FILE *fin=fopen=("hoge.log","a"); や FILE *fin=fopen=("hoge.log","a+"); で開いてます。 ( rewind(fin)は無理でした。 ) よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
C言語ライブラリのfopenは ・新規作成して上書き(古い内容は消える) ・末尾から追記(古い内容の続きに書く) のどちらかしか出来ません。 残念ながら ・既存ファイルの先頭や途中への挿入 は出来ないのです。 もし「先頭に1行挿入したい」のなら 1.作業用の別のファイルを新規作成する。 2.まず、挿入したい行を1行、1.で新規作成したファイルに書く 3.既存ファイルを「読込モード」で開いて、1行読む 4.読んだ1行を、1.で新規作成したファイルに書く 5.既存ファイルがEOFになるまで、3~4を繰り返す 6.両方のファイルを閉じる 7.既存ファイルを削除する 8.最初に新規作成したファイルのファイル名を、削除した既存ファイルのファイル名にリネームする。 というような面倒な処理が必要になります。
その他の回答 (3)
- 1108435
- ベストアンサー率43% (94/217)
この場合、追記(Append)ではなくて、更新(Renew)になりますよね。たとえば、新たなテキストをbと言うテキストファイルに保存し、追記モードでaのファイルをbに追記して、aファイルを削除して、bファイルを名称変更してaにするなんて小手先はだめ? じゃあ、なければ#2さんの言うとおり一度aのテキストをスタックに退避しておき、更新したい(追記ではない)テキストをaに落としてから、スタックを呼び出して、その後半部分に前のaの内容を書き込むと言う手しかないでしょうね。でも、これって普通、どの言語でもこの方法論しかないと思うけど。PCのファイルマネジメントがファイルポインタを指定する限りこうなるのは必至じゃないんですかね。
- Trick--o--
- ベストアンサー率20% (413/2034)
ファイルの内容を一度退避し、 新たに追記したい内容でファイルを作成(上書き) 退避した内容をその後ろに追記する などの手間をかければできると思います。
- php504
- ベストアンサー率42% (926/2160)
"a"ではファイルの最後に追記しか出来ません "r+"で上書きするか"w"で全部書き直してください 挿入などの高度な編集も出来ませんので挿入の場合は自分で工夫しないといけません