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