4 Stimmen

Warum wird System.IO auf diese Weise implementiert?

Es hat eine Weile gedauert, bis ich diesen Fehler in meinem Code gefunden habe. Ich versuche, ein temporäres Testverzeichnis zu erstellen:

Path.Combine("C:", "test"); 
Directory.CreateDirectory(path);

Also wird dieses Verzeichnis C:\test nicht erstellt. Es scheint nur das Verzeichnis test im lokalen Ordner der ausführenden Assembly zu erstellen.

Das liegt daran, dass Path.Combine("C:", "test"); C:test zurückgibt und nicht C:\test.

Ich behaupte nicht, viel über Dateisysteme zu wissen, daher sollte der Grund dafür vielleicht offensichtlich sein, aber ich verstehe es nicht. Ich bin mir nicht sicher, warum sie Path auf diese Weise implementiert haben oder warum CreateDirectory sich nicht über einen ungültigen Verzeichnisnamen beschwert.

11voto

Jon Skeet Punkte 1325502

Nun, Sie kombinieren einen Laufwerksbuchstaben und einen Namen. Unter Windows bedeutet das "der Name im aktuellen Verzeichnis dieses Laufwerks". Also zum Beispiel:

C:\> cd foo
c:\foo> d:
d:\> mkdir c:bar

dadurch wird c:\foo\bar erstellt. Es scheint also konsistent mit dem Design von Windows (im Rückgriff auf MS-DOS) für mich zu sein - das ist nicht unbedingt ein sinnvolles Design für Windows, aber es macht Sinn, dass .NET damit konsistent ist.

9voto

Oded Punkte 475566

Path.Combine verhält sich so, weil : ein gültiges VolumeSeparatorChar ist - daher wird kein \ an C: angehängt.

Von MSDN - Path.Combine Methode (String, String):

Wenn path1 kein Verweis auf ein Laufwerk ist (also "C:" oder "D:") und nicht mit einem gültigen Trennzeichen endet, wie in DirectorySeparatorChar, AltDirectorySeparatorChar oder VolumeSeparatorChar definiert, wird DirectorySeparatorChar an path1 angehängt, bevor es konkateniert wird.

Was das Verhalten von CreateDirectory betrifft - siehe die Antwort von Jon Skeet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X