指定行からのファイル追記書込み

解決


ひで  2004-12-15 18:59:40  No: 55688

環境:VC++.NET 2003 , WinXp
よろしくお願いします。
現在、ログファイル出力関数を作成しているのですが、出力したい内容をファイルの指定した行に書込みたいのですが、なにかよい方法はないでしょうか。どうかよろしくお願いします。


シャノン  2004-12-15 19:29:07  No: 55689

ファイル末尾からではなく、ファイルの途中に行を挿入したいのですか?
残念ながら、標準的な関数ではそのような機能はありません。

典型的な手法としては、以下のようになります。

1.現在のログファイルを開きます。
2.新しいログファイルを作成します。
3.行を挿入したい位置まで、現在のファイルから一行読み込んでは新しいファイルに書き込むことを繰り返します。
4.新しいファイルに挿入したい行を書き込みます。
5.現在のファイルの残りの行を、3 と同様に新しいファイルに書き込みます。
6.現在のファイルを削除します。
7.新しいファイルを、現在のファイルと同じ名前にリネームします。

これで、あたかも指定位置に行を挿入したかのようなファイルが出来上がります。


ひで  2004-12-15 20:43:44  No: 55690

どうもありがとうございます。処理的に大変そうなのでログ出力の方法を再度検討してみたいと思います。


WIZ  2004-12-15 21:54:38  No: 55691

ログが文字列ならば、WriteProfileString とか WritePrivateProfileString が使えるかもしれません。適当なセクションにエントリとして行番号を付けて、書き込みます。

[LOG]
L1=xxxxxxx
L2=xxxxxxx
L3=xxxxxxx


なーめ  2004-12-16 02:25:21  No: 55692

>> WriteProfileString
SetRegistryKey() 
してるとレジストリに行ってしまわない?
(MFCの場合)
WinXp ならイベントログの使用をおすすめですが。
[管理ツール]->[イベントビューア]


WIZ  2004-12-16 03:03:12  No: 55693

> SetRegistryKey() してるとレジストリに行ってしまわない?
そうですね。一応目的が達成できれば良いかなと。
ならば、ログの1エントリを固定長にして、seek してファイルに書き込むとか。


なーめ  2004-12-16 08:57:25  No: 55694

というか、ログって本体アプリの負荷にならないように
追記していくのが筋です。
専用ビューアを作成して、そこで並べ替えて表示するべきですね。
並べ替えのヒントくらいは本体アプリで行頭に付加しますが。


ひで  2004-12-22 05:46:04  No: 55695

皆さん、どうもありがとうございました。
とりあえずログを固定長としてseek関数を使用してファイルに書き込むことにしました。どうもありがとうございました(^^)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加