Enhetens aktuella katalogsökvägsuppräkning
Filsystemposter som hämtats med hjälp av ett sökvägsargument i form av en "enhetens aktuella katalog", till exempel C:
, skapades felaktigt genom att kombinera directory path + separator + entry name
. För att returnera rätt sökväg för posterna läggs avgränsaren inte längre till med sådana sökvägar.
Tidigare beteende
Tidigare lades ett avgränsartecken till så att de uppräknade filsystemposterna verkade finnas i enhetens rot.
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);
}
Utdata från att köra det här kodfragmentet var följande.
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
Nytt beteende
Om du kör samma kodfragment i .NET 8 och senare versioner genereras utdata utan ett avgränsartecken i varje sökväg.
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
Version introducerad
.NET 8
Typ av icke-bakåtkompatibel ändring
Den här ändringen är en beteendeförändring.
Orsak till ändringen
Användare rapporterade att det tidigare beteendet var felaktigt. Det var också en regression från .NET Framework.
Rekommenderad åtgärd
Om du är en Windows-användare som förlitar sig på uppräkning av sökvägar som C:
bör du utvärdera programmets I/O-åtgärder igen. Det här är ett ovanligt scenario som sannolikt inte kommer att användas i produktion. De flesta användare som vill räkna upp den aktuella katalogen använder Environment.CurrentDirectory i stället.
Berörda API:er
- 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)