Partager via


InMemoryDirectoryInfo préfixe rootDir aux fichiers

InMemoryDirectoryInfo ajoute maintenant le répertoire racine spécifié devant sa collection de fichiers.

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

Comportement précédent

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

Nouveau comportement

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

Version introduite

.NET 9 Preview 1

Type de changement cassant

Ce changement est un changement de comportement.

Raison de la modification

Il y a eu des scénarios bloqués avec des chemins d’accès en mémoire utilisant une lettre de lecteur différente de 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 afin de tenir compte des fichiers qui sont désormais précédés par le 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