J'ai un code qui a jeté l'exception suivante:Quel processus accède au fichier qui a provoqué une exception d'E/S lorsque j'ai essayé de le supprimer?
System.IO.IOException: The process cannot access the file 'MyFileName' because it is being used by another process.
at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
at System.IO.Directory.Delete(String path, Boolean recursive)
at MyCodeSomewhere...
En général, je sais que cela veut dire que j'ai eu une exception quelque part et non tondu la (par exemple) StreamReader
pertinents.
Occasionnellement (seulement de temps en temps, typiquement c'est ma faute) je reçois la situation où quelque chose en dehors de mon programme a un verrou sur le fichier (comme mon éditeur de texte, qui est toujours ma faute, mais moins méchant qu'un bogue causé par moi ne pas ranger après moi-même).
Existe-t-il une technique que je peux utiliser par programme pour détecter le processus qui provoque l'indisponibilité du fichier?
- Est-ce mon processus?
- Est-ce un autre processus sur cette machine? Si c'est le cas, quel est son nom?
- L'ordinateur distant est-il accessible via un partage de fichiers? Si oui, ai-je une chance de trouver des informations pertinentes?
Que se passerait-il dans la méthode GetProcessNameCausingMeGrief
?
catch (IOException ioEx)
{
string processName = GetProcessNameCausingMeGrief(ioEx);
if (processName == Process.GetCurrentProcess())
{
throw new ApplicationException("Oops, this code still has it's own file locked", ioEx);
}
throw;
}