Подтвердить что ты не робот

FileStream с заблокированным файлом

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

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

Спасибо!

4b9b3361

Ответ 1

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

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

FileStream Constructor (String, FileMode, FileAccess, FileShare)

Ссылка MSDN

FileAccess

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

Обменник

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

Ответ 2

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

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

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

Ответ 3

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

FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);

Ответ 4

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