2015-05-01 4 views
0

У меня есть файл журнала на сервере Production, который постоянно обновляется программой (очень часто говорят от 5 до 10 раз в секунду).Чтение файла, доступного только для чтения, блокирует файл

Этот файл журнала явно доступен только для чтения для сервера Dev, и вероятность того, что размер файла увеличится до ~ 4 МБ.

У меня есть программа в среде Dev. Это периодически считывает содержимое файла и ищет определенные строки/ключевые слова.

************************ 
If File.Exists(targetFile) Then 
      Using fs As FileStream = New FileStream(targetFile,    FileMode.Open, FileAccess.Read) 
       Using sr As StreamReader = New StreamReader(fs) 
        Dim all As String = sr.ReadToEnd() 
        allLines = all.Split(Environment.NewLine) 
       End Using 
      End Using 
End If 
******************************** 

Моя проблема в том, что это похоже на чтение с сервера разработчиков, блокирующего файл [не уверен]. Таким образом, служба PRD не может получить доступ к файлу и бросать ошибки.

ответ

4

Вы используете this overload конструктора FileStream. В документации сказано

Конструктор дается доступ на чтение/запись в файл, и он открыт обмен доступа на чтение (то есть запросы, чтобы открыть файл для написания той или другой процесс потерпит неудачу пока объект FileStream не будет закрыт, но попытки чтения будут успешными).

Если вы хотите, чтобы другие процессы чтения и записи в файл, необходимо открыть в режиме FileShare.ReadWrite, используя this overload.

+0

Исправьте, что четвертый параметр FileShare является ответом - но кажется, что .Read или .ReadWrite разрешают другим доступ к файлу. – rheitzman

+0

@ rheitzman OP говорит, что производственный сервер не может записывать в файл журнала, пока поток открыт. Поэтому вам нужно открыть с помощью Write или ReadWrite (в зависимости от того, читает ли сервер из собственного файла журнала). –

+0

Я думаю, что проблема заключалась в том, что программа-разработчик блокировала файл, который случайно вызывал ошибки сервера. Возможно, вы исправите, что обе программы должны использовать свойство FileShare(), но я предполагаю, что только изменение программы dev сделает трюк. – rheitzman

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

  • Нет связанных вопросов^_^