2008-10-01 12 views
1

Je cherche une bibliothèque C# pour obtenir des fichiers ou répertoire à partir d'un répertoire à l'aide d'un modèle complexe comme celui utilisé dans Ant:fichier de recherche dans le répertoire en utilisant modèle complexe

  • dir1/dir2/**/SVN/* -> Matchs tous les fichiers Répertoires SVN qui se trouvent n'importe où dans l'arborescence de répertoires sous dir1/dir2
  • **/test/** -> Correspond à tous les fichiers ayant un élément de test dans leur chemin, y compris le test en tant que nom de fichier.
  • ...

Ai-je besoin de le coder moi-même? extraire ce que je veux de NAnt? Ou cette bibliothèque existe et ma compétence google est nulle.

Directory.GetFiles(String path, String searchPattern) ne gère pas modèle de répertoire et NDepend.Helpers.FileDirectoryPath ni (c'est une grande bibliothèque pour la manipulation de chemin en passant)

Répondre

1

codage vous-même ne serais pas si difficile.

Il suffit d'utiliser une expression régulière formulé correctement avec les méthodes System.IO pour construire le chemin complet

+0

Cette réponse acceptée est ce que le! Ok, vérifiez **/some (dir) /a*.txt "vous devez remplacer" ("with" \\ ("et". "Avec" \\. "Avant d'obtenir une expression régulière. être si difficile "code: https://github.com/spring-projects/spring-framework/blob/master/spring-core/src/main/java/org/springframework/util/AntPathMatcher.java – Abdurrahim

-1

Êtes-vous à l'aise avec la définition de « * » comme « tout sauf slash » et « ** » comme « rien du tout » ? Si c'est le cas, la conversion de regex semble simple.

* -> [^\/]* 
** -> .* 

Ensuite, il est une question de récursive tous les fichiers énumérer, et vérifier si leurs chemins correspondent à l'expression rationnelle.

+3

Seriez-vous prêt? –

+0

C'est un début mais vous devez échapper aux caractères regex car certains caractères sont autorisés pour le chemin comme "\\" ou "(" ou même "."; Mais même avec ça Il y aura beaucoup de failles par exemple: "./somefolder/**/somefile.txt" => Le premier point signifie que le dossier en cours fait partie du nom de fichier, donc vous devez développer le premier point avec le répertoire courant avant de vérifier la correspondance, ,,, – Abdurrahim