Rinominare la Directory con lo stesso nome caso diverso
Domanda
Sto provando a rinominare una directory in c # con un nome uguale solo con casi diversi.
Ad esempio: f: \ test a f: \ TEST
Ho provato questo codice:
var directory = new DirectoryInfo("f:\\test");
directory.MoveTo("f:\\TEST");
e ottengo una IOException - Il percorso di origine e destinazione deve essere diverso. Ho anche provato Directory.Move () con lo stesso risultato.
Come viene fatto? Devo creare una directory temporanea separata, spostare i file contenuti dalla directory originale alla directory temporanea, quindi eliminare l'originale e rinominare la directory temporanea?
Soluzione
Bene, non è necessario creare una directory separata e spostare tutto. Rinomina la cartella in qualcosa di diverso e poi torna al nome che desideri:
var dir = new DirectoryInfo(@"F:\test");
dir.MoveTo(@"F:\test2");
dir.MoveTo(@"F:\TEST");
Altri suggerimenti
Perché non rinominare la directory temp
e quindi rinominare nuovamente in TEST
?
Anche se il metodo .NET DirectoryInfo.MoveTo
genera un'eccezione se il nome è lo stesso, puoi chiamare l'API di Windows MoveFile
funzionano in questo modo per impostare il case del nome della directory:
bool success = MoveFile(dirInfo.FullName, dirInfo.FullName);
Con questa dichiarazione esterna:
[DllImport("kernel32", SetLastError = true)]
private static extern bool MoveFile(string lpExistingFileName, string lpNewFileName);
Funziona bene per me quando il nome differisce solo nel caso. Non ho provato a chiamarlo così quando il nome è già esattamente come specificato.
Questo ha il vantaggio che la directory non scompare mai con il suo nome originale.
Ha lo svantaggio però che funziona solo su Windows.
La risposta è sì in questo caso: il file system stesso non vede i due come diversi, quindi dovrai eliminare e aggiungere come nuovo nome (o spostare / cancellare / spostare come hai suggerito)