2012-02-05 42 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

您的程序是寫入流,還是另一個程序寫入文件,而您旋轉等待檢查文件大小? – 2012-02-05 20:25:00

+0

另一個程序正在同時訪問該文件,同時我想繼續檢查是否寫入了新數據。 – haiyyu 2012-02-05 20:32:26

回答

5

你可能想看看FileSystemWatcher看看這是否會是更好的解決方案。忙碌的等待通常不是一個好的解決方案。

+2

+1輕描淡寫:「忙碌的等待通常不是一個好的解決方案」 – 2012-02-05 20:52:27

2

在這種情況下,我認爲您不應該將文件保持在「打開」狀態,因爲另一個程序無法將數據寫入文件。

嘗試使用FileSystemWatcher class代替接收有關文件更改的通知(example)。

+0

「另一個程序無法將數據寫入文件」是不正確的。可以將參數傳遞給'File.Open',以指示文件訪問可以共享。 – Timwi 2012-02-05 21:14:08