2009-11-30 4 views
1

Soit: dossier pour renommer c: \ temp \ Torename à: c: \ temp \ ToRenameComment renommer un dossier/répertoire en C#?

Directory.Move ne fonctionne pas parce que le dossier (: \ temp \ Torename) existent déjà.

Je recherche une solution qui n'implique pas la création d'un dossier temporaire. J'ai cette solution en place: Déplacer vers un dossier temporaire (nom unique) par exemple c: \ temp \ TorenameTemp Passer du dossier temporaire au nouveau dossier. par exemple c: \ temp \ ToRename Le problème est que mon dossier peut devenir très volumineux et le déplacement peut prendre un certain temps à s'exécuter. J'aime Windows Explorer solution dans laquelle l'utilisateur renomme sur place indépendamment de la taille.

merci pour votre temps.

+0

Vous essayez de changer la casse d'un dossier existant? – SLaks

+0

Serait-il plus facile de créer le répertoire avec le nom correct en premier lieu? –

+0

SLaks: Oui Marque: Oui- J'aimerais, mais nous ne contrôlons pas l'utilisateur et l'information est en cours d'enregistrement sur le disque, c'est la raison pour laquelle je dois résoudre ce problème –

Répondre

6
Directory.Move(@"C:\Temp\Dir1", @"C:\Temp\dir1_temp"); 
Directory.Move(@"C:\Temp\dir1_temp", @"C:\Temp\dir1"); 

Les fichiers ne seront pas déplacés à moins que vous ne les déplaciez sur un volume différent. Si la destination est sur le même volume, seul le nom du répertoire changera.

+0

Cette solution sera utilisée contre un lecteur réseau. (\\ serveur \ MyShare \ dir1) –

+0

Tant que le volume est le même, tout ira bien. –

4

Directory.Move ne correspond pas à la taille du répertoire (sauf si vous copiez sur un autre lecteur), il n'y a donc rien de mal à l'appeler deux fois.

+0

Il convient de noter qu'il doit faire avec comment un arbre B + fonctionne. –

+0

@ColeJohnson: Quoi? – SLaks

+0

Les pointeurs. Il change juste le parent du répertoire –

-1

Directory.Move pour le répertoire File.Move pour le fichier

0

Voici comment cela pourrait se faire:

My.Computer.FileSystem.RenameDirectory("c:\temp\Torename", "ToRename") 

Le premier paramètre est le répertoire courant, le second paramètre est le nouveau nom de le répertoire.

Source: FileSystem.RenameDirectory Method

+0

Cet exemple est dans VB.NET. C# n'a naturellement pas d'espace de nom pour "Mon" et malheureusement aucune alternative. Vous devez ajouter la référence Microsoft.VisualBasic dans votre projet et importer l'espace de noms FileIO en dessous dans la classe dans laquelle vous souhaitez utiliser l'instruction équivalente "FileSystem.RenameDirectory (" c: \ temp \ Torename "," ToRename ") ". J'espère que cela t'aides! :) – Jeff