驱动器的当前目录路径枚举

如果文件系统条目使用“驱动器的当前目录”形式的 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