Partager via


InMemoryDirectoryInfo ajoute rootDir au début des fichiers

InMemoryDirectoryInfo ajoute maintenant le répertoire racine spécifié au début de sa collection de fichiers.

InMemoryDirectoryInfo est utilisé par MatcherExtensions.Match, ce qui permet au Matcher d’exécuter des modèles de correspondance glob sans accéder au disque.

Comportement précédent

Auparavant, les chemin d'accès relatifs dans l’argument files du constructeur étaient précédés du répertoire de travail actuel (CWD). Cela a provoqué une dépendance inutile sur le CWD pour un type censé fonctionner en mémoire.

Nouveau comportement

À compter de .NET 9, les chemins d’accès relatifs dans l’argument files du constructeur sont précédés du répertoire racine spécifié.

Version introduite

.NET 9 Préversion 1

Type de changement cassant

Ce changement est un changement de comportement.

Raison du changement

Il y a eu des scénarios bloqués avec des chemins en mémoire utilisant une lettre de lecteur autre que celle utilisée par le répertoire de travail actuel. Par exemple, consultez le problème dotnet/runtime 93107.

Si vous dépendez du comportement précédent, ajustez votre code pour prendre en compte les fichiers qui sont maintenant précédés du répertoire racine. Par exemple :

// Since rootDir is also relative, it could've been used to filter the matching scope of `files`.
-string rootDir = "dir1";
// Now that's not possible; everything in `files` is under `root`.
+string rootDir = "root";
string[] files = ["dir1/test.0", "dir1/subdir/test.1", "dir2/test.2"];

-PatternMatchingResult result = new Matcher().AddInclude("**/*").Match(rootDir, files);
// Adjust the pattern if you want to scope down to dir1.
+PatternMatchingResult result = new Matcher().AddInclude("dir1/**/*").Match(rootDir, files);
Console.WriteLine(string.Join(", ", result.Files.Select(x => x.Path)));

// Output:
// dir1/test.0
// dir1/subdir/test.1

API affectées