Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les entrées du système de fichiers obtenues à l’aide d’un argument de chemin d’accès dans la forme du répertoire actif d’un lecteur, par exemple, C:, ont été incorrectement formées en combinant directory path + separator + entry name. Pour renvoyer le chemin d’accès correct pour les entrées, le séparateur n’est plus ajouté à ces chemins.
Comportement précédent
Auparavant, un caractère de séparation a été ajouté afin que les entrées de système de fichiers énumérées apparaissent dans la racine du lecteur.
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 sortie de l’exécution de cet extrait de code était la suivante.
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
Nouveau comportement
L’exécution du même extrait de code dans .NET 8 et les versions ultérieures produit un résultat sans caractère de séparation dans chaque chemin d’accès.
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
Version introduite
.NET 8
Type de changement cassant
Ce changement est un changement de comportement.
Raison de la modification
Les utilisateurs ont signalé que le comportement précédent était incorrect. Il s’agissait également d’une régression de .NET Framework.
Action recommandée
Si vous êtes un utilisateur Windows qui s’appuie sur l’énumération des chemins d’accès comme C:, vous devez réévaluer les opérations d’E/S de votre application. Il s’agit d’un scénario inhabituel qui n’est pas susceptible d’être utilisé en production. La plupart des utilisateurs qui souhaitent énumérer l’annuaire actif utilisent Environment.CurrentDirectory à la place.
API affectées
- 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)