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?

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top