Question

J'essaie de renommer un répertoire en c # en un nom identique à celui de casse différente.

Par exemple: f: \ test sur f: \ TEST

J'ai essayé ce code:

var directory = new DirectoryInfo("f:\\test");
directory.MoveTo("f:\\TEST");

et j'obtiens une exception IO: le chemin source et le chemin de destination doivent être différents. J'ai également essayé Directory.Move () avec le même résultat.

Comment cela se fait-il? Dois-je créer un répertoire temporaire distinct, déplacer les fichiers contenus du répertoire d'origine vers le répertoire temporaire, puis supprimer le fichier d'origine et renommer le répertoire temporaire?

Était-ce utile?

La solution

Eh bien, vous n'avez pas besoin de créer un répertoire séparé et de tout déplacer. Renommez simplement le dossier en un nom différent, puis revenez au nom de votre choix:

var dir = new DirectoryInfo(@"F:\test");
dir.MoveTo(@"F:\test2");
dir.MoveTo(@"F:\TEST");

Autres conseils

Pourquoi ne pas renommer le répertoire temp , puis renommer à nouveau TEST ?

Même si la méthode .NET DirectoryInfo.MoveTo lève une exception si le nom est identique, vous pouvez appeler l'API Windows MoveFile de cette manière pour définir la casse du nom du répertoire:

bool success = MoveFile(dirInfo.FullName, dirInfo.FullName);

Avec cette déclaration externe:

[DllImport("kernel32", SetLastError = true)]
private static extern bool MoveFile(string lpExistingFileName, string lpNewFileName);

Cela fonctionne bien pour moi lorsque le nom ne diffère que par des cas. Je n'ai pas essayé de l'appeler ainsi lorsque le nom est déjà exactement tel que spécifié.

Cela présente l'avantage que le répertoire ne disparaît jamais sous son nom d'origine.

Il a toutefois le désavantage de ne fonctionner que sous Windows.

La réponse est oui dans ce cas - le système de fichiers lui-même ne voit pas les deux comme différents, vous devez donc supprimer et ajouter comme nouveau nom (ou déplacer / supprimer / déplacer comme vous l'avez suggéré)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top