FileStream с заблокированным файлом - PullRequest
15 голосов
/ 17 мая 2011

Мне интересно, возможно ли получить доступ только для чтения FileStream к заблокированному файлу?Теперь я получаю исключение при попытке прочитать заблокированный файл.

using (FileStream stream = new FileStream("path", FileMode.Open))

Спасибо!

Ответы [ 4 ]

28 голосов
/ 17 мая 2011

Вы должны попробовать другой конструктор.Они задокументированы в MSDN.

Этот выглядит как ставка:

FileStream Constructor (String, FileMode, FileAccess, FileShare)

Ссылка MSDN

FileAccess

Константа, определяющая, как файл может быть доступен объекту FileStream.Это получает свойства CanRead и CanWrite объекта FileStream.CanSeek имеет значение true, если путь указывает файл диска.

FileShare

Константа, определяющая, как файл будет использоваться процессами.

7 голосов
/ 17 мая 2011
using (FileStream stream = new FileStream("path", FileMode.Open))

Это будет использовать значение по умолчанию для аргумента FileShare, FileShare.Read.Который запрещает любой процесс записи в файл.Это не может работать, если в файл записывается другой процесс, вы не можете отрицать уже полученное право.

Необходимо указать FileShare.ReadWrite.Это могло бы все еще не работать, если другой процесс использовал FileShare.None, никакого обходного пути для этого.Помните, что получение доступа для чтения к записываемому файлу проблематично, у вас нет надежного указания конца файла.Последняя запись или строка в файле могла быть написана только частично.

1 голос
/ 24 марта 2016

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

FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
0 голосов
/ 17 августа 2012

Вы можете просто разблокировать файл и прочитать файл после него. Просто используйте Handle.exe из Sysinternals или Unlocker с параметрами командной строки. Они оба могут разблокировать файл, и вы можете легко запустить их из вашей программы, не выходя из вашей программы. (Но не используйте их для файла Windows SAM, он не работает с SAM;)) Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...