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.
Empfohlene Maßnahme
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
- System.IO.Directory.EnumerateFiles
- System.IO.Directory.EnumerateDirectories
- System.IO.Directory.EnumerateFileSystemEntries
- System.IO.Directory.GetFiles
- System.IO.Directory.GetDirectories
- System.IO.Directory.GetFileSystemEntries
- System.IO.DirectoryInfo.EnumerateFiles
- System.IO.DirectoryInfo.EnumerateDirectories
- System.IO.DirectoryInfo.EnumerateFileSystemInfos
- System.IO.DirectoryInfo.GetFiles
- System.IO.DirectoryInfo.GetDirectories
- System.IO.DirectoryInfo.GetFileSystemInfos
- FileSystemEnumerable<TResult>(String, FileSystemEnumerable<TResult>.FindTransform, EnumerationOptions)