- 締切済み
ファイル操作
あるアプリにログを取る処理を加えたいのですが、 (1)ファイル名を1回毎に作成し、10回程度毎に一番古いのを消していく方式 (2)2M程度で1ファイル内でトコロテン式 のどちらが良いのでしょうか? また、(2)の場合のやり方を教えてください。自分はいつも(1)のやり方でやっていました。 でもそれだと、HDの残り容量が気になるので困っています。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
連続したバッファの中に10ブロックのデータを入れる訳ですから、考え方は、バッファでも行でも同じだと思います。(LFコードが入るだけですから) 行単位でのデータ管理に重点を置くなら、2次配列なんかを使って何行目のデータというのを区別すれば良いと思います。 >行ごとに古いもの(上から)から上書きしていくことは出来ないでしょうか? これは新規ログをいきなりHDに書き込むと言うことですか?旧データをメモリ上に展開しておいてから、新規データを追加したものを最新のログとしてHDに保存しないと、データの信用性が少なくなると思います。また、メモリ上で行わずに、毎回HDから先ほど書き込んだデータを読み出して変更をかけて、またHDに書き込むというのも 動きすぎです。(う~ん、私が質問の意図を理解してないのですかね?)
(2)の方が良いのですが、、、 ログを取る頻度によるのですが、頻繁に2Mのファイルを保存するのは実質無理です。 通常のロギング中は、メモリ上で変更し、一定時間後にファイルとして 2Mのファイルを保存する方法が良いかと思います。 (メモリ上での変更中にハングすれば、それまでですけど、、、) ロギングの頻度が少ないとして、 方法は、ログカウンタを1個、新規ログを貯めておくバッファ1個、 過去ログを貯めておくバッファ1個で、新規ログが着たらログカウンタを +1、 過去ログの前から9ブロックを新規ログに追加し、過去ログにセット、 10になったら、ファイルとしてHDに書き込み。 こんな感じでいけると思いますが、細かいところは自分で考えて下さい。
補足
お答えありがとうございます。 でもちょっと分からないんですが、教えてくださったのは、 メモリ上で並び替え(古いデータを削除)を行い、ファイルに書く というやり方。 (と理解したんですが、あってますか?) バッファという考え方ではなく、行ごとに古いもの(上から)から上書きしていくことは出来ないでしょうか?