Enumeración de ruta de acceso de directorio actual de la unidad
Las entradas del sistema de archivos obtenidas mediante un argumento path en la forma de "directorio actual de una unidad", por ejemplo, C:
, se formaron incorrectamente mediante la combinación de directory path + separator + entry name
. Para devolver la ruta de acceso correcta para las entradas, el separador ya no se agrega con estas rutas de acceso.
Comportamiento anterior
Anteriormente, se agregó un carácter separador de modo que las entradas del sistema de archivos enumeradas parecían estar en la raíz de la unidad.
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);
}
La salida de la ejecución de este fragmento de código era la siguiente.
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
Comportamiento nuevo
La ejecución del mismo fragmento de código en .NET 8 y versiones posteriores genera resultados sin un carácter separador en cada ruta de acceso.
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
Versión introducida
.NET 8
Tipo de cambio importante
Este es un cambio de comportamiento.
Motivo del cambio
Los usuarios informaron de que el comportamiento anterior era incorrecto. También fue una regresión de .NET Framework.
Acción recomendada
Si es un usuario de Windows que se basa en la enumeración de rutas de acceso como C:
, debe volver a evaluar las operaciones de E/S de la aplicación. Este es un escenario inusual que es poco probable que se use en producción. La mayoría de los usuarios que quieren enumerar el directorio actual usan Environment.CurrentDirectory en su lugar.
API afectadas
- 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)