2010-05-11 7 views
5

Ho bisogno di ottenere l'elenco dei file su alcune unità con percorsi che corrispondono a un modello specifico, ad esempio FA \ d \ d \ d \ d \ xml dove \ d è cifra (0,1 , 2..9). Quindi i file possono avere nomi come FA5423.xml.Come trovare i file secondo RegEx in C#

Qual è il nome più efficiente per fare questo?

risposta

1

utilizzare l'API Directory per trovare FA????.xml, ed eseguire l'elenco risultante attraverso un filtro regex:

var fa = from f in Directory.GetFiles("FA????.xml") 
     where Regex.Match(f, "FA\d\d\d\d\.xml") 
     select f; 
+4

Non sarà Regex.Match restituire un oggetto Match anziché un valore booleano? –

3

Si potrebbe fare qualcosa di simile:

System.IO.Directory.GetFiles(@"C:\", "FA????.xml", SearchOption.AllDirectories); 

Poi dai risultati poco scorrere su di loro e verificali contro la tua espressione regolare, ovvero che i caratteri ? nel nome sono tutti numeri

15

Stai utilizzando C# 3?

Regex reg = new Regex(@"^FA[0-9]{4}\.xml$"); 
var files = Directory.GetFiles(yourPath, "*.xml").Where(path => reg.IsMatch(path)); 
+0

'.Seleziona (percorso => ​​percorso)' è ridondante. –

+0

oki ... e ora che guardo di nuovo, dovrei ancorare la regex e non ha senso ottenere "*. *". –

+0

@Phil Meglio usare EnumerateFiles come questo http://stackoverflow.com/questions/3554559/regex-to-find-a-file-in-folder a causa delle prestazioni si potrebbe vedere la differenza in questo http://stackoverflow.com/domande/5669617/cosa-è-il-differenza-tra-directory-enumeratefiles-vs-directory-GetFiles – QMaster

Problemi correlati