驱动器的当前目录路径枚举
如果文件系统条目使用“驱动器的当前目录”形式的 path 参数(例如 C:
)获取,那么通过组合 directory path + separator + entry name
,这些条目格式不正确。 为了返回条目的正确路径,分隔符不再与这些路径一起使用。
旧行为
以前,添加了分隔符,以便枚举的文件系统条目看起来位于驱动器的根目录中。
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);
}
运行此代码片段的输出如下所示。
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
新行为
在 .NET 8 及更高版本中运行相同的代码片段会生成每个路径中没有分隔符的输出。
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
引入的版本
.NET 8
中断性变更的类型
此更改为行为更改。
更改原因
用户报告称以前的行为不正确。 这是 .NET Framework 的性能下降。
建议的操作
如果你是依赖于 C:
之类的路径枚举的 Windows 用户,则应重新评估应用程序的 I/O 操作。 这是不常见的场景,不太可能在生产环境中使用。 大多数想要枚举当前目录的用户转而使用 Environment.CurrentDirectory。
受影响的 API
- 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)