- - PR -
テキストファイル読み書きについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-05 18:18
テキストファイルに、10行しかデータを書き込めないとして、
ある処理をすると1行ずつデータを書き込んでいくとします。 10行目まで書いたら、次の処理での書き込みは、 1行目に上書きする、というような処理を VBで書くことはできないでしょうか?? よろしくお願いしますm(__)m | ||||
|
投稿日時: 2007-01-05 18:28
「できないでしょうか」と言われれば、「できます」という答えになりますが。
「ファイルに」上書きするという考えではなく、プログラム内に配列を持っておいて「配列に」上書きして、 その配列を新しいファイルを書き出す、と考えてください。 | ||||
|
投稿日時: 2007-01-05 18:34
mioさん、お返事ありがとうございますm(__)m
そうですね、質問のしかたが少しよくないですね すみません。 もしお時間があれば、 少し詳しくコードのサンプル等書いていただけると助かります。 いただいたお返事を元に、自分でも調べてみます。 ありがとうございましたm(__)m | ||||
|
投稿日時: 2007-01-05 18:40
たびたびすみません。
追記ですが、 実際は4メガ程度のログで、 このような処理を行いたいと思っています。 | ||||
|
投稿日時: 2007-01-05 19:38
普通はスグに上書きしないで、ログファイル自体を世代管理してローテーションするのが普通だと思います。
1ファイルでもできないことはないでしょうが、処理のコストがかなりかかるような気がしますし。。。 | ||||
|
投稿日時: 2007-01-05 20:05
#私はログファイル自体を分けてしまうことが多いのですが・・
1行目に戻る・・ではなくて、追記したあとで所定の行数を超過した分だけ配列の先頭から{削除して書き込む|書き込み時にスキップする}というのではダメですか? | ||||
|
投稿日時: 2007-01-05 20:45
こんにちは
業務側のシステムでは、いつも同じ名前のログ xxxsystem.log とかを出力させておいて 外部のプログラムで、みなさんが書かれているように、ログローテーションさせるのが 個人的にはいいかなー って思います。 たとえば、Solarisなら、logadm ってコマンドでサイズだったり期間で ローテーションさせることができます。 xxxsystem.log.1 -> xxxsystem.log.2 xxxsystem.log.0 -> xxxsystem.log.1 xxxsystem.log -> xxxsystem.log.0 Windowsだと、Windows Server 2003 R2 だと Common Log File System というのがあるらしいのですが、詳細は知りません。 VBSで作って、バッチから呼ぶようにして、1日1回Windowsのタスクから このバッチを呼び出してあげればOKそうですね。 VBにこの機能を組み込むことの弊害はおわかりですよね? 運用部署が変わって、やっぱり2週間ごとにログをローテーションさせたい とか、要件が変わってきた場合に、VBの中でやってると、EXEを 作り直さないといけません。 (外部設定ファイルでいろいろできる設計なら別ですが) (このVBのシステムが常にログファイルを排他的につかんでるなら 内部でローテーションしないとだめかな・・・) | ||||
|
投稿日時: 2007-01-05 21:04
しまった、.NETの会議室でしたね。申し訳ございません。
一応サンプル的なものを書いて、お茶を濁します。(汗 Dim fi As New System.IO.FileInfo("C:\xxxsystem.log") Dim logsize As Long = fi.Length if logsize > 4194304 then System.IO.File.Move("C:\xxxsystem.log", "C:\xxxsystem.log.0") end if ログファイルそのものが移動されては困るということであれば 移動後に、0バイトでクリエイトしちゃえばよいかな? Dim sw As New System.IO.StreamWriter("c:\xxxsystem.log", _ False, _ System.Text.Encoding.GetEncoding(932)) sw.Close() 動作環境が無いので、申し訳ございませんが、間違えがあったら ご指摘ください。 |