Процесс не может получить доступ к файлу, потому что он используется другим процессом - PullRequest
24 голосов
/ 18 мая 2009

У меня есть набор ночных отчетов.

Иногда я получаю исключение:

Процесс не может получить доступ к файлу, потому что он используется другим процессом

Как мне узнать, какой процесс держит файл? Я думаю, что это Макафи, но мне нужно это доказать.

Ответы [ 10 ]

19 голосов
/ 10 июня 2009

Проблема заключалась в том, что MailMessage в .NET держал вложенные файлы. Мне пришлось избавиться от вложений, и тогда это сработало.

9 голосов
/ 18 мая 2009

Используйте такой инструмент, как Process Explorer или Process Monitor .

3 голосов
/ 27 апреля 2011
Attachment data = new Attachment(@"c:\filename");

'send email....

data.Dispose();    
1 голос
/ 13 августа 2009

Подтверждено. У меня была похожая проблема, и я сделал то, что сказал Грег.

В блоке finally после отправки сообщения я просто поместил его туда, и он освободил дескрипторы файлов:

foreach(Attachment a in message.Attachments) a.Dispose();
1 голос
/ 18 мая 2009

вот некоторые инструменты, которые сообщают и разблокируют заблокированные файлы: http://ccollomb.free.fr/unlocker/

0 голосов
/ 29 сентября 2012

У меня просто была такая же проблема, но в моем случае я пытался удалить файл .mdf в Visul Studio 2012. Не было много информации об ошибке, приведенной, чтобы помочь мне решить эту проблему, и поэтому я пришел сюда в поисках помощи , Затем я понял, что, хотя это была похожая проблема, мне пришлось столкнуться с другим процессом.

Я попытался удалить файл .mdf в проводнике Windows, а затем я выдал ошибку, что SQL Server 2008 R2 фактически держался за файл, даже если у меня была удалена база данных. Как только я узнал об этом, все, что мне нужно было сделать, это завершить работу SQL Server 2008 R2 и снова попытаться удалить файл, и он заработал.

Если вам нужны инструкции по включению и выключению SQL Server 2008 R2, см. Ссылку ниже.

Включение и выключение SQL Server

0 голосов
/ 19 июня 2012

Я пытался запустить программу на Java и получил сообщение. Посмотрев в диспетчере задач, уже была запущена задача Java (зацикливание?), Когда я убил этот процесс, мой процесс смог работать.

0 голосов
/ 13 октября 2011

GC.Collect () после удаления должен исправить это

0 голосов
/ 18 мая 2009
  1. Process Explorer > Найти> Найти Дескриптор> введите имя вашего файла.
  2. Unlocker . Попробуйте открыть его, если он имеет замок, разблокировщик откроется и покажет вам программы, которые его блокируют.
0 голосов
/ 18 мая 2009

Filemon может быть инструментом, который вы ищете.

(или даже Process Monitor , который, очевидно, заменил FileMon.)

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