2009-05-18 2 views
25

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

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

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

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

+2

Просто мысль, это, вероятно, не ваша защита от вирусов. Это никогда не было в моем опыте. На самом деле это обычно мой код. Удостоверьтесь, что у вас есть «использование» везде, где вы открываете файл. –

+0

Это другое сообщение в Stack Overflow - это блокировка на dll. Это файловая блокировка в текстовом файле. У меня есть инструкция using. –

+0

Я бы проверял права доступа к папкам для любого принципала, который вы используете для своего процесса. У него могут не быть прав, чтобы переместить его, просто доступ только для чтения. –

ответ

19

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

0

Filemon Возможно, вы ищете инструмент.

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

+0

Я пытаюсь переименовать файл в C#, я просто использую file.move (source, destination), но каждый раз, когда я пытаюсь получить ошибку, файл используется другим процессом. Я переименовываю сквозной веб-интерфейс, используя asp.net, iis6. спасибо – safi

1

здесь какой-то инструмент (ы), который говорит и разблокировать заблокированные файлы: http://ccollomb.free.fr/unlocker/

+1

В любом случае я могу сделать это программно в C#? –

+0

нашел этот дублированный вопрос здесь: http://stackoverflow.com/questions/317071/how-do-i-find-out-which-process-is-locking-a-file-c – Kamarey

+1

Этот другой пост в переполнении стека блокировка на dll. Это файловая блокировка в текстовом файле. –

9

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

+0

Я пытаюсь переименовать файл в C#, я просто использую file.move (source, destination), но каждый раз, когда я пытаюсь получить ошибку, файл используется другим процессом. Я переименовываю сквозной веб-интерфейс, используя asp.net, iis6. спасибо – safi

+0

@safi Вам нужно задать новый вопрос. Вы можете прокомментировать мне ссылку на него ... –

+0

Я задал этот вопрос, но у меня не было соответствующего ответа. ссылка http://stackoverflow.com/questions/5152841/file-renaming-problem – safi

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

Я пытаюсь переименовать файл в C#, я просто использую file.move (source, destination), но каждый раз, когда я пытаюсь получить ошибка файла используется другим процессом. Я переименовываю сквозной веб-интерфейс, используя asp.net, iis6. спасибо – safi

1

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

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

foreach(Attachment a in message.Attachments) a.Dispose(); 
+0

@Mike Я пытаюсь переименовать файл в C#, я просто использую file.move (source, destination), но каждый раз, когда я пытаюсь получить ошибку, файл используется другим процессом. Я переименовываю сквозной веб-интерфейс, используя asp.net, iis6. спасибо – safi

3
Attachment data = new Attachment(@"c:\filename"); 

'send email.... 

data.Dispose();  
0

GC.Collect() после того, как отчуждать должен исправить

+0

Это работает в моем случае, так как распоряжения не происходят достаточно быстро или строго. это просто плохо. Там должен быть лучший путь. – Steve

0

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

0

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

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

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

Turn on and off SQL Server

Смежные вопросы

 Смежные вопросы