2012-02-05 8 views
2

私は、新しいデータがFileStreamオブジェクトに書き込まれるとすぐにアクションを呼び出すプログラムを作成しようとしています。あなたが見ることができるように、ストリームの長さは現在の位置よりも大きくなるまで、すべてこのクラスが待っているんデータがストリームに書き込まれたときのイベント?

public class BlockingFileStream : FileStream 
{ 

    public override int Read(byte[] array, int offset, int count) 
    { 
     while (Position == Length) ; 
     return base.Read(array, offset, count); 
    } 

    public override int ReadByte() 
    { 
     while (Position == Length) ; 
     return base.ReadByte(); 
    } 

} 

次のように私の現在のアプローチがあります。しかし、私はこれを行うより良い方法があるかどうか疑問に思っていました。だから私の質問は:

上に掲示されているコードで行われていることを行う良い方法はありますか?

+0

プログラムはストリームに書き込んでいるのですか、ファイルサイズを調べてスピンしている間に別のプログラムがファイルに書き込んでいますか? –

+0

新しいデータが書き込まれたかどうかを確認しながら、別のプログラムが同時にファイルにアクセスしています。 – haiyyu

答えて

5

FileSystemWatcherをご覧になると、それがより良い解決策であるかどうかを確認できます。ビジー待機は通常、良い解決策ではありません。

+2

+1を控えめにしています: "ビジーな待ちは通常良い解決策ではありません" –

2

この場合、別のプログラムがファイルにデータを書き込めないため、ファイルを「開いた」状態にしないでください。

代わりにFileSystemWatcher classを使用して、ファイルの変更に関する通知を受け取ります(example)。

+0

"他のプログラムがファイルにデータを書き込めない"というのは真実ではありません。 'File.Open'に引数を渡すことは可能ですファイルアクセスを共有することができます。 – Timwi

関連する問題