Снятие блокировок файлов - PullRequest
       8

Снятие блокировок файлов

2 голосов
/ 23 октября 2008

Мне нужно восстановить форму ошибки, когда файл остается в заблокированном состоянии. Как я могу в C # сказать этот файл, чтобы сбросить его блокировки? Мне нужно добавить к этому файл, открываемый сторонней библиотекой DLL, и у меня фактически нет доступа к дескриптору файла.

Ответы [ 4 ]

5 голосов
/ 23 октября 2008

За блокировку файла отвечает операционная система (от имени программы, которая его открывает). Если файл оставлен в заблокированном состоянии, его действительно нужно разблокировать для ОС. Обычно это происходит автоматически при выходе из процесса, открывшего файл.

Однако есть очень классная утилита, которая мне поможет. Это называется Unlocker .

1 голос
/ 23 октября 2008

Возможно, вы могли бы запустить процесс командной строки, такой как net или psfile, с чем-то вроде:

System.Diagnostics.Process.Start("psfile c:\myfile.txt -c");

Вы можете получить psfile здесь .

Вы также можете использовать

net file ID /close

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

Не проверено, но это должно дать вам отправную точку.

1 голос
/ 23 октября 2008

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

Возможно ли, что библиотека обеспечивает устранение ошибки, вы только что ее просмотрели? Попробуйте что-то вроде следующего,

 try {
   thirdPartyObj = new ThirdPartObj();
   // Some possible error causing object actions
 catch(Exception ex) {
   thirdPartyObj = null; // The object should close its resources
 }
0 голосов
/ 23 октября 2008

Вы должны закрыть файл, используя .Close (). Вы должны убедиться, что у вас все еще есть способ доступа к объекту файла.

Обычно вы можете избежать этой ошибки, написав конструкцию try {} ... finally {} после кода, который выполняет ваш файловый ввод-вывод. В блоке finally {} вы вызываете метод Close вашего файлового объекта, предотвращая это условие. Вы также можете использовать блок {} при создании своих файлов, и это также решит эту проблему.

...