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

Смежные вопросы