C# Recherche pour un sous-répertoire (pas pour les fichiers)
Chaque exemple je vois semble être pour l'obtention de fichiers de manière récursive dans les sous-répertoires utilise uniquement des fichiers. Ce que j'essaie de faire est de chercher un dossier pour un sous-répertoire nommé "xxx" puis enregistrer ce chemin d'accès à une variable donc je peux l'utiliser pour d'autres choses.
Est-ce possible sans boucle, à travers tous les répertoires et en les comparant, par son nom?
Vous devez vous connecter pour publier un commentaire.
Bien
vous renverra un tableau de la sous-répertoires.
Vous pouvez ensuite utiliser Linq pour trouver celui qui vous intéresse:
qui n'est pas une boucle dans votre code, mais c'est toujours une boucle néanmoins. Donc, l'ultime réponse est "non vous ne pouvez pas trouver un dossier "test" sans boucle".
Vous pouvez ajouter
.SingleOrDefault()
à l'Linq, mais cela dépendra de ce que tu voulais faire si votre dossier "test" ne pouvait pas être trouvé.Si vous modifiez le
GetDirectories
appel d'inclure le SearchOptionSearchOption.AllDirectories
puis il va faire la récursivité pour vous aussi. Évidemment, dans ce cas, l'appel pourrait retourner plus d'un élément, si il n'y a plus d'un dossier nommé "test" dans votre arborescence de répertoire.using System.Linq
pour obtenir leWhere
que c'est une méthode d'extension.Cela renvoie un tableau de chaînes avec tous les dossiers trouvés avec le nom donné. Vous pouvez modifier le paramètre dernière afin qu'il vérifie uniquement les répertoires de niveau supérieur et vous pouvez changer le dossier à régler où c'est à partir de.
Tout d'abord, "Non, il n'est pas possible sans boucle, à travers tous les répertoires et en les comparant, par son nom".
Je crois que votre question est "Est-il un API qui va gérer une boucle dans tous les répertoires et en les comparant, par son nom pour moi?"
Oui, il est. Il est appelé
Directory.Exists()
:Oui, je crois que la seule solution disponible (court de bibliothèques tierces) est une recherche récursive pour le répertoire par nom de comparaison.
Vous pouvez utiliser la Recherche Windows qui fournit des api pour .Net aussi. Voici plus d'informations détaillées: Windows Search 4.0 pour les Développeurs
Voici un extrait de code pour la recherche d'un dossier à l'aide de deux filtres tout en tenant compte de la UnauthorizedAccessException, il peut être reconstruit pour utiliser un seul filtre:
Exemple d'utilisation: