Freigeben über


Enumeration des aktuellen Laufwerkverzeichnispfads

Dateisystemeinträge, die mit einem Pfadargument in Form des aktuellen Verzeichnisses eines Laufwerks abgerufen wurden, z. B. C:, wurden fälschlicherweise durch die Kombination von directory path + separator + entry name gebildet. Um den richtigen Pfad für die Einträge zurückzugeben, wird das Trennzeichen nicht mehr bei solchen Pfaden hinzugefügt.

Vorheriges Verhalten

Zuvor wurde ein Trennzeichen hinzugefügt, sodass es wirkte, als würden die aufgezählten Dateisystemeinträge sich im Stammverzeichnis des Laufwerks befinden.

string pathToEnumerate = "C:";

Console.WriteLine($"Full path of \"{pathToEnumerate}\" is {Path.GetFullPath(pathToEnumerate)}.");
Path.GetFullPath(pathToEnumerate);

Console.WriteLine($"Enumerating files and folders in \"{pathToEnumerate}\".");
foreach (string entry in Directory.GetFileSystemEntries(pathToEnumerate))
{
    Console.WriteLine(entry);
}

Die Ausgabe der Ausführung dieses Codeschnipsels lautete wie folgt.

Full path of "C:" is C:\Users\myalias\consoleapps\Program

Enumerating files and folders in "C:".
C:\Program.csproj
C:\Program.sln
C:\bin
C:\obj
C:\Program.cs

Neues Verhalten

Wenn Sie dasselbe Codeschnipsel in .NET 8 und höheren Versionen ausführen, wird die Ausgabe ohne Trennzeichen in jedem Pfad erzeugt.

Full path of "C:" is C:\Users\myalias\consoleapps\Program.

Enumerating files and folders in "C:".
C:Program.csproj
C:Program.sln
C:bin
C:obj
C:Program.cs

Eingeführt in Version

.NET 8

Typ des Breaking Changes

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

Benutzer haben berichtet, dass das vorherige Verhalten falsch war. Es war auch eine Regression von .NET Framework.

Wenn Sie ein Windows-Benutzer sind, der auf Enumerationen von Pfaden wie C: angewiesen ist, sollten Sie die E/A-Vorgänge Ihrer Anwendung erneut auswerten. Das ist ein ungewöhnliches Szenario, das wahrscheinlich nicht in der Produktion verwendet wird. Die meisten Benutzer, die das aktuelle Verzeichnis auflisten möchten, verwenden stattdessen Environment.CurrentDirectory.

Betroffene APIs