2013-08-05 5 views
6

Я читаю файл, который периодически записывается сторонней программой. чтение Im, используя приведенную ниже FileStream:Чтение файла без возникновения IOException в сторонней программе

using (FileStream fs = new FileStream(
         FullPath, 
         FileMode.Open, 
         FileAccess.Read, 
         FileShare.ReadWrite)) 

Однако программа третья сторона записи в файл, но с помощью FileShare.None

Так иногда у меня есть файл открыт для чтения, когда программа 3-й партии пытается открыть файл с эксклюзивным доступом, но не удается.

Как я могу прочитать этот файл, не вызывая проблем для сторонней программы? Я бы не прочь отпустить мое чтение, чтобы отдать приоритет другому приложению. Любой способ сделать это?

+0

Вы пытались скопировать его во временное местоположение и прочитать оттуда? Обычно я создаю функцию, которая пытается прочитать файл, если он используется, возвращает false, но если не возвращает true, я пытаюсь скопировать и переместить файл в место, где я могу работать с ним. Работа с файлом производства может быть потенциально опасной, особенно при использовании двух процессов в миксе. – Bearcat9425

+0

File.Copy просто выполняет FileStream в фоновом режиме. Проблема заключается не в том, когда я пытаюсь прочитать и заблокировать ее. Его, когда у меня есть доступ к файлу, и сторонняя программа пытается получить эксклюзивный доступ, но не могу, потому что я открываю его. – CathalMF

+0

Что делать, если вы копируете файл в временное местоположение и позволяете вашей программе использовать этот временный файл так, чтобы исходный файл не использовался и поэтому может быть доступен третьей стороне без проблем. Если это имеет смысл: D – aladd04

ответ

1

Что вы хотите сделать, это следить за уведомлениями о создании процесса, и когда вы увидите, что какой-то конкретный процесс возникнет, вы захотите выйти из своего пути.

IWbemServices::ExecNotificationQuery

Вот некоторые дополнительные детали прочь MSDN. Вот также CodeProject: Process Information and Notifications using WMI

+0

К сожалению, другой процесс - это сервис, который всегда работает. – CathalMF

1

Если этот сторонний процесс (.exe, служба Windows, веб-приложение и т. Д.) Когда-либо останавливается, вы можете получить доступ к файлу, когда это произойдет, если оно никогда не прекратится или невозможно сообщите, когда он запустится, вы можете сделать копию этого файла сразу же после включения сервера.

Это будет действительным или недействительным в зависимости от характера вашего приложения, а также от того, как часто вам нужно читать этот файл.

+0

Нах это никогда не останавливается. – CathalMF

+0

Возможно, у этой службы есть общедоступный метод, из которого вы можете получить ту же информацию, которая находится в файле. –

1

В то время как я не использовал его, попробовали ли вы использовать метод System.IO.Filestream.Unlock, который поможет вам передать части файла, которые в настоящее время не заблокированы другим программным обеспечением? Я просто предполагаю, что другое программное обеспечение не блокирует весь файл.

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

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