J'utilise DirectoryInfo.GetDirectories()
récursivement pour trouver tous les sous-répertoires sous un chemin donné. Cependant, je veux exclure les dossiers système et il n'y a pas de moyen clair pour cela. Dans FindFirstFile/FindNextFile, les choses étaient plus claires avec les attributs.DirectoryInfo.GetDirectories() et les attributs
Répondre
@rslite est juste, .NET ne donne pas un tel filtrage hors-box, mais ce n'est pas difficile à mettre en œuvre:
static IEnumerable<string> GetNonSystemDirs(string path)
{
var dirs = from d in Directory.GetDirectories(path)
let inf = new DirectoryInfo(d)
where (inf.Attributes & FileAttributes.System) == 0
select d;
foreach (var dir in dirs)
{
yield return dir;
foreach (var subDir in GetNonSystemDirs(dir))
{
yield return subDir;
}
}
}
liens MSDN:
Vous devrez probablement parcourir les résultats et rejeter ceux avec les attributs que vous ne voulez pas (utilisez la propriété Attributes).
Ceci est un excellent exemple d'un scénario où Linq et les méthodes d'extension rendent les choses vraiment propres et faciles.
public static DirectoryInfo[] GetNonSystemDirectories(
this DirectoryInfo directory,
string searchPattern,
SearchOption searchOption)
{
return directory.GetDirectories(searchPattern, searchOption)
.Where(subDir => (subDir.Attributes & FileAttributes.System) == 0)
.ToArray();
}
Si vous construisez une application v2 .net, vous pouvez utiliser LinqBridge pour vous donner accès à tous les Linq frais aux méthodes d'objets (comme where() et ToArray() ci-dessus).
Modifier
Dans .net v4 vous utiliseriez EnumerateDirectories au lieu de GetDirectories qui vous permet de parcourir les résultats sans la construction d'un tableau en mémoire d'abord.
public static IEnumerable<DirectoryInfo> EnumerateNonSystemDirectories(
this DirectoryInfo directory,
string searchPattern,
SearchOption searchOption)
{
return directory.EnumerateDirectories(searchPattern, searchOption)
.Where(subDir => (subDir.Attributes & FileAttributes.System) == 0);
}
En utilisant le renvoie des chaînes, doux ultime Linq
IEnumerable<string> directories = new DirectoryInfo(path).GetDirectories().Where(a => (a.Attributes & FileAttributes.System) == 0).Select(a => a.FullName);
- 1. ILMerge et attributs personnalisés sur les classes
- 2. Attributs XSD et résumé
- 3. .net - Comment utiliser les attributs et y compris les arguments?
- 4. Quels sont les attributs?
- 5. DllImport - attributs PreserverSig et SetLastError
- 6. Pourquoi les attributs gérés fonctionnent-ils uniquement pour les attributs de classe et non pas par exemple les attributs dans python?
- 7. Utilisation des ressources pour la réflexion et les attributs
- 8. DBML supprime les attributs .Name?
- 9. TouchXML analyse les attributs XML
- 10. Visio et UML - Affichage des pointeurs dans les attributs et les valeurs de retour
- 11. changer le AssemblyVersion et Programmatically AssemblyFileVersion attributs
- 12. Classe Python et attributs de module
- 13. Réflexion, attributs et sélection de propriétés
- 14. Injection de dépendances et attributs .NET
- 15. xslt et XPath: correspondre deux attributs noeud
- 16. Relations et attributs d'enregistrements actifs immuables (Setters)
- 17. délégué C# et attributs question syntaxe
- 18. Comment puis-je récupérer les attributs d'images?
- 19. Comment inspecter ou rechercher les attributs .NET?
- 20. Récupère les attributs personnalisés d'un membre spécifique
- 21. Lire les valeurs des attributs avec linq
- 22. Performances d'ActionScript2: Itérer sur les attributs d'objet
- 23. XML Parse avec hpricot, obtenir les attributs
- 24. XPath: Comment sélectionner les nœuds sans attributs?
- 25. Création d'un schéma XML avec des attributs et des éléments subordonnés à d'autres attributs
- 26. schéma XML contruct pour un type avec les énumérations et les attributs
- 27. Outil de comparaison XML qui peut "Tidy" le XML et ignorer les différences dans les attributs
- 28. Quelle est la différence entre les méthodes et les attributs dans Ruby?
- 29. Différence entre les attributs et les balises de style dans lxml
- 30. Comment définir des attributs distincts sur les getters et les setters en F #?
Directory.GetDirectories comment obtenez-vous les attributs de ce? :) – aku
@aku J'utilise la méthode d'instance DirectoryInfo.GetDirectories, pas la méthode statique Directory.GetDirectories. –
Pas aussi efficace/utilisable que de créer un vrai itérateur récursif en utilisant le rendement de rendement. Sur les grandes hiérarchies de répertoires utilisant SearchOption.AllDirectories n'est pas si bon. – Ash