2010-01-22 3 views
5

In meiner Anwendung versuche ich, den Ordner umzubenennen, aber wenn der Ordner in Windows Explorer geöffnet wird, erhalte ich eine IOException. Wie kann ich feststellen, ob der Ordner in Windows Explorer in C# geöffnet ist?Wie erkennt man, ob der Ordner geöffnet ist?

+0

Windows Explorer, Cmd, ein anderer Dateimanager, ein Shell-Öffnen/Speichern-Dialog. Es gibt mehr als nur Explorer, die das offen halten können. – Joey

+0

Möchten Sie feststellen, ob Windows Explorer es geöffnet hat oder nur, ob ein anderer Prozess einen offenen Handle hat? Und was willst du erreichen? Das Einfangen der Ausnahme ist ein ziemlich gutes Anzeichen dafür, dass ein anderer Prozess einen Griff hat, wenn das alles ist, was Sie anstreben. – Dathan

+0

@Dathan Catching Ausnahme ist eine gute Idee, aber wir haben sehr große Code-Basis Multi-Thread-Anwendung. Es ist gut, wenn wir das Wetter erkennen, dem wir zugestimmt haben. Danke, –

Antwort

8

die IOException abfangen?

Wie andere gesagt haben, versuchen Sie einfach zu tun, was Sie wollen, fangen Sie die Ausnahme ein, wenn es passiert, und ergreifen Sie geeignete Maßnahmen, was auch immer in Ihrem Kontext ist.

Sie haben nicht wirklich viel Auswahl haben, wie ich es sehe, betrachten:

bool iHaveAccess = CheckAccess(folder); 
if (iHaveAccess) 
{ 
    RenameFolder(folder,newFolderName); 
} 

was zwischen Checkaccess passiert, wenn Erfolg und RenameFolder etwas anderes sperrt den Ordner aufrufen? Was machst du dann?

+0

Ja, so würde ich es tun. Sie sollten dies wahrscheinlich trotzdem überwachen. – Toji

1

Es ist nicht sinnvoll festzustellen, ob ein Programm einen Ordner geöffnet hat, der das Umbenennen verhindert. Denn unmittelbar nachdem Sie die Entscheidung getroffen haben, könnte ein anderer Prozess den Ordner starten oder stoppen. Tun Sie stattdessen einfach die Operation und fangen Sie die resultierende Ausnahme ab.

try { 
    Directory.Move("old","new"); 
    return true; 
} catch (IOException) { 
    return false; 
} 
0

nach einiger Suche fand ich this post und this post, die für verschiedene Techniken zeigen, wie Sie programmatisch bestimmen können, welcher Prozess eine Datei gesperrt hat. Eine davon sollte Ihnen erlauben zu überprüfen, ob der Explorer den Ordner gesperrt hat.