Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
Nuevo comportamiento
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 disruptivo
Este es un cambio de comportamiento.
Motivo del cambio
Los usuarios informaron de que el comportamiento anterior era incorrecto. También fue un retroceso con respecto a .NET Framework.
Acción recomendada
Si usted es un usuario de Windows que se basa en la enumeración de rutas como las que incluyen C:, debería volver a evaluar las operaciones de E/S de su aplicación. Este es un escenario inusual que es poco probable que se use en producción. En su lugar, la mayoría de los usuarios que quieren enumerar el directorio actual usan Environment.CurrentDirectory .
Las APIs 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)