Enumeração do caminho de diretório atual da unidade
As entradas do sistema de arquivos obtidas usando um argumento de caminho na forma de um "diretório atual da unidade", por exemplo, C:
foram incorretamente formadas pela combinação directory path + separator + entry name
de . Para retornar o caminho correto para as entradas, o separador não é mais adicionado com esses caminhos.
Comportamento anterior
Anteriormente, um caractere separador foi adicionado de tal forma que as entradas enumeradas do sistema de arquivos pareciam estar na raiz da unidade.
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);
}
A saída da execução desse trecho de código foi a seguinte.
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
Novo comportamento
A execução do mesmo trecho de código no .NET 8 e versões posteriores produz saída sem um caractere separador em cada caminho.
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
Versão introduzida
.NET 8
Tipo de mudança de rutura
Esta mudança é uma mudança comportamental.
Razão para a alteração
Os usuários relataram que o comportamento anterior estava incorreto. Foi também uma regressão do .NET Framework.
Ação recomendada
Se você for um usuário do Windows que depende da enumeração de caminhos como C:
, deverá reavaliar as operações de E/S do seu aplicativo. Este é um cenário incomum que dificilmente será usado na produção. A maioria dos usuários que deseja enumerar o diretório atual usa Environment.CurrentDirectory em vez disso.
APIs afetadas
- 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)