Quando si rinomina una cartella in C#, System.IO.Directory.Move
genera System.IO.IOException
(messaggio "accesso negato") se quella cartella o qualsiasi sottocartella è attualmente aperta da un esploratore (Windows 7) finestra. Anche l'utilizzo della riga di comando RENAME
non riesce. L'utilizzo di una seconda finestra di Explorer ha esito positivo.Come rinominare una cartella in C# che è attualmente aperta da Windows Explorer
L'errore persiste anche dopo il collasso della cartella principale (o dei suoi genitori). In effetti, la finestra dell'esploratore particolare deve essere chiusa. Quindi l'esploratore sembra creare alcuni blocchi solo per mostrare la struttura della cartella e non li rilascia anche se la cartella attuale non è più visualizzata (che è puro non-sense IMO).
C'è un modo per rinominare una cartella (in programma ad esempio utilizzando C#), che viene visualizzata (o era visibile, vedi sopra) da una finestra di Explorer?
Aggiornamento
trovato un modo come descritto dalla mia risposta a questa domanda (vedi sotto) utilizzando SHFileOperation()
. Tuttavia, questa soluzione non è molto fattibile (vedi anche sotto).
Ho provato questo e funziona, probabilmente hai anche un file aperto o non abbastanza autorizzazioni per quella cartella. Ho creato una directory 'D: \ a' e ho navigato su di esso tramite explorer, quando ho eseguito questo codice' Directory.Move ("D: \\ a", "D: \\ b"); ', la cartella nome cambiato automaticamente in Explorer e nella barra degli indirizzi. –
@Wouter: Penso che sia necessario aggiungere un altro livello. Crea 'D: \ a \ b', vai a' D: \ a \ b' tramite explorer e prova a rinominare 'a' (come' x' o qualsiasi altra cosa). Non funziona qui. Ora naviga su 'a' o su' computer' in modo che né 'a' né 'b' siano mostrati in quella finestra (solo le unità sono mostrate). Ancora non funziona. A proposito, nessun file aperto e nessun problema di autorizzazione di sicuro. – user2261015
In parte, quando explorer mostra la sottocartella, lancia la 'IOException', quando explorer mostra l'unità root, funziona. Devo dire che sto testando su Windows 10 che potrebbe spiegare la leggera differenza. –