Ich habe einige Code, die folgende Ausnahme ausgelöst hat:Welcher Prozess greift auf die Datei zu, die eine IOException verursachte, als ich versuchte, sie zu löschen?
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...
Normalerweise weiß ich das zu bedeuten habe ich eine Ausnahme irgendwo hatte und nicht die relevant (z) StreamReader
aufräumte.
Gelegentlich (nur gelegentlich, normalerweise ist es meine Schuld) Ich bekomme die Situation, wo es etwas außerhalb meines Programms hat eine Sperre für die Datei stattdessen (wie mein Texteditor, der immer noch meine Schuld ist, aber weniger böse als ein Fehler verursacht von mir nicht aufräumen nach mir selbst).
Gibt es eine Technik, die ich programmatisch verwenden kann, um festzustellen, welcher Prozess die Datei nicht verfügbar ist?
- Ist es mein Prozess?
- Ist es ein anderer Prozess auf dieser Maschine? Wenn ja, wie lautet der Name?
- Wird von einem Remote-Computer über Dateifreigabe zugegriffen? Wenn ja, habe ich eine Chance, relevante Informationen zu erfahren?
Was würde in der Methode gehen 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;
}