2009-05-18 14 views
25

J'ai un ensemble de rapports nocturnes.Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus

Parfois je suis l'exception:

Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus

Comment puis-je savoir quel processus tient sur le dossier? Je pense que c'est McAfee mais je dois le prouver.

+2

Juste une pensée, il est probablement pas votre protection antivirus. Cela n'a jamais été dans mon expérience. En fait, c'est généralement mon code. Assurez-vous que vous avez "utiliser" partout où vous ouvrez un fichier. –

+0

Cet autre message sur Stack Overflow est un verrou sur une DLL. Ceci est un verrouillage de fichier sur un fichier texte. J'ai une déclaration d'utilisation. –

+0

Je vérifierais les droits d'accès au dossier pour le principal que vous utilisez pour votre processus. Il peut ne pas avoir les droits de le déplacer, il suffit de lire uniquement l'accès. –

Répondre

19

Le problème était que MailMessage dans .NET conservait les pièces jointes. Je devais faire une disposition sur la pièce jointe et ensuite cela a fonctionné.

0

Filemon peut être l'outil que vous recherchez.

(ou même Process Monitor qui a apparemment remplacé FileMon.)

+0

J'essaie de renommer un fichier en C#, j'utilise simplement fichier.move (source, destination) mais chaque fois que j'essaie j'obtiens une erreur le fichier est utilisé par un autre processus. Je suis en train de renommer une interface web via asp.net, iis6. merci – safi

1

ici quelques outils (s) qui indique et déverrouiller les fichiers verrouillés: http://ccollomb.free.fr/unlocker/

+1

De toute façon je peux le faire par programme dans C#? –

+0

trouvé cette question en double ici: http://stackoverflow.com/questions/317071/how-do-i-find-out-which-process-is-locking-a-file-c – Kamarey

+1

Cet autre poste sur Stack Overflow est un verrou sur une DLL. Ceci est un verrouillage de fichier sur un fichier texte. –

9

Utilisez un outil comme Process Explorer ou Process Monitor.

+0

J'essaie de renommer un fichier en C#, j'utilise simplement fichier.move (source, destination) mais chaque fois que j'essaie j'obtiens une erreur le fichier est utilisé par un autre processus. Je suis en train de renommer une interface web via asp.net, iis6. merci – safi

+0

@safi Vous devez faire une nouvelle question. Vous êtes invités à me commenter un lien ... –

+0

J'ai fait cette question mais je n'ai pas eu une réponse appropriée. le lien est http://stackoverflow.com/questions/5152841/file-renaming-problem – safi

0
  1. Process Explorer> Rechercher> Rechercher Handle> tapez votre nom de fichier.
  2. Unlocker. Essayez de l'ouvrir, si a un verrou, déverrouilleur va ouvrir et vous montrer les programmes qui le verrouillent.
+0

J'essaie de renommer un fichier en C#, j'utilise simplement fichier.move (source, destination) mais à chaque fois que j'essaie je reçois un erreur le fichier est utilisé par un autre processus. Je suis en train de renommer une interface web via asp.net, iis6. merci – safi

1

Confirmé. J'ai eu un problème similaire et fait ce que Greg a dit.

Dans finally bloc après avoir envoyé le message, je viens de mettre cela là-dedans, et il a publié le fichier poignées:

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

@Mike J'essaie de renommer un fichier en C#, j'utilise simplement fichier.move (source, destination) mais chaque fois que j'essaie j'obtiens une erreur le fichier est utilisé par un autre processus. Je suis en train de renommer une interface web via asp.net, iis6. merci – safi

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

'send email.... 

data.Dispose();  
0

GC.Collect() après la Éliminez doit fixer

+0

cela fonctionne dans mon cas puisque les dispositions ne se produisent pas assez rapidement ou strictement. c'est juste mauvais à faire. Il doit y avoir une meilleure façon. – Steve

0

J'essayais de démarrer un programme Java et j'ai reçu le message. En regardant dans le Gestionnaire des tâches, il y avait déjà une tâche Java en cours d'exécution (en boucle?) Lorsque j'ai tué ce processus, mon processus a pu fonctionner.

0

Je viens d'avoir le même problème mais dans mon cas j'essayais de supprimer un fichier .mdf dans Visul Studio 2012. Il n'y avait pas beaucoup d'informations sur l'erreur donnée pour m'aider à résoudre ce problème et je suis venu ici à la recherche Aidez-moi. Puis j'ai réalisé que même si c'est un problème similaire, c'était plutôt un processus différent que j'ai eu à traiter. Ce que j'ai fait était d'essayer de supprimer le fichier .mdf dans Windows Explorer et puis j'ai donné une erreur que SQL Server 2008 R2 tenait en fait au fichier même si j'avais la base de données supprimée. Une fois que je l'ai fait, tout ce que je devais faire était d'arrêter SQL Server 2008 R2 et j'ai essayé de supprimer le fichier à nouveau et cela a fonctionné.

Si vous avez besoin d'instructions sur l'activation et la désactivation de SQL Server 2008 R2, voir le lien ci-dessous.

Turn on and off SQL Server

Questions connexes