Поделиться через


Перечисление текущего пути к каталогу диска

Записи файловой системы, полученные с помощью аргумента пути в форме текущего каталога диска, например, 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.

Если вы являетесь пользователем Windows, использующим перечисление путей, например C:, следует повторно оценить операции ввода-вывода приложения. Это необычный сценарий, который вряд ли будет использоваться в рабочей среде. Большинство пользователей, которые хотят перечислить текущий каталог Environment.CurrentDirectory , вместо этого.

Затронутые API