アプリ版:「スタンプのみでお礼する」機能のリリースについて

windowsのC#での話です。あるプロセスが断続的(数秒程度で一定しません)に、ログファイルをオープンして内容を書き込んでファイルをクローズして、、、ということをやっています。で、そのログファイルをtail -fコマンドのように監視するコードを書きたいのですが、どのように書けばいいのかわかりません。FileStream("logfile.txt", FileMode.Open, FileAccess.Read, FileShare.Read)としてファイルをオープンし、ファイルの最後までseekして、それ以降は永久に、1秒sleepしては該当ファイルの内容を読み込み続ける、というプログラムを書いたのですが、このコードを実行すると、このオープンしたログファイルを他のプログラムからは書き込みのために新たにopenできなくなるようで、他のプログラムがログファイルの書き込みでエラーを出力するようになってしまいました。
tail -fをc#で書くにはどのようなコードを書けばいいのでしょうか。ご教授ください。

A 回答 (2件)

> FileStream("logfile.txt", FileMode.Open, FileAccess.Read, FileShare.Read)



 アクセス制御の指定がFileShare.Readなので、他のプロセスは読込しかできなく、書き込もうとしたらエラーになります。ここは他のプロセスのアクセスを制御するパラメータなので、
 FileShare.Write
または
 FileShare.ReadWrite
を指定する必要があります。
    • good
    • 0
この回答へのお礼

なるほど。わかりました。もう一度ヘルプを見直してみて、今更ながらちゃんと理解しました。
どうもありがとうございました!

お礼日時:2010/06/07 20:31

ログファイルをフルアクセスで開いて、他のプロセスが書き足してるのに邪魔したらエラーになるのは当然な気がします。



tailの様な事をしたいのであれば、1秒毎にファイルサイズ比較して、増えたらログファイルコピーしてコピーした物開いて、前のファイルサイズ分シークして、増分を出力するとか?(workで作ったファイルは消すなりなんなりするような)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ログファイルに内容が追加されていたら毎回コピー、というのはできれば避けたいのですが、、、
回答いただいて申し訳ないのですが、もう少しスマートな方法がほしいです。

お礼日時:2010/06/07 20:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!