Frage

Ich versuche, ein Verzeichnis in c # zu einem Namen zu benennen, die das gleiche ist nur mit Fall unterscheiden.

Zum Beispiel: f: \ test zu f: \ TEST

Ich habe diesen Code versucht:

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

und ich bekomme eine IOException - Quell- und Zielpfad unterschiedlich sein müssen. Ich habe auch Directory.Move () mit dem gleichen Ergebnis ausprobiert.

Wie wird das gemacht? Muß ich ein separates temporäres Verzeichnis erstellen, die enthaltenen Dateien aus dem ursprünglichen Verzeichnis in das temporären Verzeichnis verschieben, und dann das Original löscht, und das temporäre Verzeichnis umbenennen?

War es hilfreich?

Lösung

Nun, Sie brauchen kein separates Verzeichnis und verschieben alles zu schaffen. benennen Sie den Ordner, in etwas anderes und dann zurück zu dem gewünschten Namen:

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

Andere Tipps

Warum das Verzeichnis temp nicht umbenennen und benennen Sie anschließend wieder TEST?

Auch wenn die .NET-Methode DirectoryInfo.MoveTo löst eine Ausnahme aus, wenn der Name das gleiche ist, können Sie das Windows-API-Aufruf MoveFile wie diese Funktion das Gehäuse des Verzeichnisnamens zu setzen:

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

Mit dieser extern-Deklaration:

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

Es funktioniert gut für mich, wenn der Name nur für den Fall unterscheidet. Ich habe nicht versucht, es so nennen, wenn der Name bereits genau wie angegeben.

Dies hat den Vorteil, dass das Verzeichnis nie unter seinem ursprünglichen Namen verschwindet.

Es hat den Nachteil aber, dass es funktioniert nur unter Windows.

Die Antwort ist ja in diesem Fall - das Dateisystem selbst nicht sieht, die beide so unterschiedlich, so dass Sie löschen brauchen werden und die hinzufügen, um den neuen Namen (oder verschieben / löschen / verschieben, wie Sie vorgeschlagen)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top