J'essaie de renommer un répertoire en C # à un nom identique uniquement avec un cas différent.
Par exemple: F: \ Test sur f: \ Test p>
J'ai essayé ce code: p> et je reçois une ioexception - la source de la source et de la destination doit être différente. . J'ai aussi essayé le répertoire.move () avec le même résultat. P> Comment ça fait? Dois-je créer un répertoire Temp distinct, déplacez les fichiers contenus du répertoire d'origine dans le répertoire TEMP, puis supprimez l'original et renommez le répertoire Temp? P> p>
4 Réponses :
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 aurez donc besoin de supprimer et d'ajouter comme nouveau nom (ou déplacer / supprimer / déménager comme suggestion) < / p>
Le système de fichiers lui-même fait. L'emballage de l'API Windows autour d'elle introduit une insensivité de cas.
Pourquoi ne pas renommer le répertoire TEMP code> puis renommez à nouveau sur
Test code>? P>
Eh bien, vous n'avez pas besoin de créer un répertoire séparé et de tout déplacer. Il suffit de renommer le dossier sur quelque chose de différent puis de retour au nom que vous souhaitez:
var dir = new DirectoryInfo(@"F:\test"); dir.MoveTo(@"F:\test2"); dir.MoveTo(@"F:\TEST");
Merci, cela rend beaucoup plus de sens que la façon dont j'ai décrit le faire.
En fait, bougerfileeex code> n'a même pas besoin de ce drapeau pour le faire; Vous pouvez même utiliser
movefile code>, et ça fonctionne bien. C'est le BCL qui empêche le renommant, pas Win32.
Même si la méthode .NET répertoireIfo.moveto code> jette une exception si le nom est identique, vous pouvez appeler l'API Windows
mobilefile code>
fonctionne comme ceci pour définir le boîtier du nom du répertoire: [DllImport("kernel32", SetLastError = true)]
private static extern bool MoveFile(string lpExistingFileName, string lpNewFileName);
Cela fonctionne bien, mais cela n'affecte que le fichier / répertoire réel et non les répertoires racines (ou le répertoire où le fichier est situé, si vous déplacez un fichier). Donc, si vous avez besoin de l'ensemble du chemin pour vous conformer au nom souhaité, vous devez faire boucle tous les répertoires de chemin d'accès à la racine et à vérifier / déplacez chacun d'eux à un nouveau nom avec la capitalisation souhaitée.