Beim Umbenennen eines Ordners in C# System.IO.Directory.Move
wird System.IO.IOException
(Nachricht "Zugriff verweigert") ausgelöst, wenn dieser Ordner oder ein Unterordner derzeit von einem Explorer (Windows 7) geöffnet wird Fenster. Die Befehlszeile RENAME
schlägt ebenfalls fehl. Mit einem zweiten Explorer gelingt Windows.So benennen Sie einen Ordner in C# um, der gerade von Windows Explorer geöffnet wird
Der Fehler bleibt auch nach dem Zusammenklappen des übergeordneten Ordners (oder seiner Eltern) bestehen. In der Tat muss das bestimmte Explorer-Fenster geschlossen werden. So scheint der Explorer einige Sperren zu erstellen, nur um die Ordnerstruktur anzuzeigen und sie nicht zu veröffentlichen, selbst wenn der tatsächliche Ordner nicht mehr angezeigt wird (was pure nonsens IMO ist).
Gibt es eine Möglichkeit, einen Ordner umzubenennen (in einem Programm, z. B. mit C#), das derzeit durch ein Explorer-Fenster angezeigt wird (oder sichtbar war, siehe oben)?
aktualisieren
einen Weg gefunden, wie sie durch meine eigene Antwort auf diese Frage beschrieben (siehe unten) SHFileOperation()
verwenden. Diese Lösung ist jedoch nicht sehr machbar (siehe auch unten).
Ich habe das getestet und es funktioniert, wahrscheinlich haben Sie auch eine Datei geöffnet oder nicht genügend Berechtigungen für diesen Ordner. Ich habe ein Verzeichnis 'D: \ a' erstellt und über den Explorer dorthin geblättert, als ich diesen Code' Directory.Move ("D: \\ a", "D: \\ b"); ', den Ordner ausgeführt habe Der Name wurde in der Explorer- und Adressleiste automatisch geändert. –
@Wouter: Ich denke, du musst ein weiteres Level hinzufügen. Erstellen Sie 'D: \ a \ b', navigieren Sie zu" D: \ a \ b "über den Explorer und versuchen Sie dann,' a' (als 'x' oder was auch immer) umzubenennen. Es funktioniert hier nicht. Navigieren Sie nun zu 'a' oder zu' computer', so dass weder 'a' noch' b' in diesem Fenster angezeigt werden (nur die Laufwerke werden angezeigt). Es funktioniert immer noch nicht. BTW, keine Dateien geöffnet und keine Erlaubnis Problem sicher. – user2261015
Teilweise, wenn der Explorer den Unterordner anzeigt, wird die 'IOException' ausgelöst, wenn der Explorer das Root-Laufwerk anzeigt, funktioniert es. Ich muss sagen, dass ich unter Windows 10 teste, was den kleinen Unterschied erklären könnte. –