#c# #.net #c#-4.0 #filestream #filelock
#c# #.net #c #-4.0 #поток файлов #блокировка файла
Вопрос:
Мне интересно, возможно ли получить файловый поток только для чтения в заблокированный файл? Теперь я получаю исключение при попытке прочитать заблокированный файл.
using (FileStream stream = new FileStream("path", FileMode.Open))
Спасибо!
Комментарии:
1. Строка, которую вы показываете, не пытается прочитать заблокированный файл, в ней вы пытаетесь открыть файл. Вы создаете этот файл где-то еще? Если условие блокировки существует, вы, вероятно, делаете что-то для создания этого условия. Пожалуйста, покажите больше кода вокруг единственной строки, которую вы указали.
Ответ №1:
Вам следует попробовать другой конструктор. Они задокументированы в MSDN.
Это выглядит как ставка:
FileStream Constructor (String, FileMode, FileAccess, FileShare)
Доступ к файлу
Константа, которая определяет, как объект FileStream может получить доступ к файлу. Это возвращает свойства CanRead и CanWrite объекта FileStream. Значение CanSeek равно true, если путь указывает файл на диске.
Файлообменник
Константа, которая определяет, как файл будет совместно использоваться процессами.
Ответ №2:
using (FileStream stream = new FileStream("path", FileMode.Open))
При этом будет использоваться значение по умолчанию для аргумента FileShare, FileShare.Read. Который запрещает любому процессу запись в файл. Это не может сработать, если в файл записывается другой процесс, вы не можете отказать в праве, которое уже было получено.
Вы должны указать файловый ресурс.ReadWrite. Это все еще могло бы не сработать, если бы другой процесс использовал FileShare.Нет, для этого нет обходного пути. Имейте в виду, что получение доступа на чтение к записываемому файлу сопряжено с трудностями, у вас нет надежного указания конца файла. Возможно, последняя запись или строка в файле были записаны только частично.
Ответ №3:
Я использовал следующее, которое работает, однако следует использовать с осторожностью, поскольку файл может быть изменен, пока вы открываете его другим процессом.
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read,FileShare.ReadWrite);
Ответ №4:
Вы можете просто разблокировать файл и прочитать файл после него. Просто используйте Handle.exe из Sysinternals или Unlocker с параметрами командной строки. Они оба могут разблокировать файл, и вы можете легко выполнить их из своей программы, не выходя из своей программы. (Но не используйте их для файла Windows SAM, это не работает с SAM 😉 ) Удачи !