2011-12-15 14 views
7

In C# se ho un percorso di directory e un percorso file relativo con carattere jolly, e "..\blah\*.cpp", esiste un modo semplice per ottenere l'elenco dei percorsi di file assoluti, { "c:\foo\blah\a.cpp", "c:\foo\blah\b.cpp" }?Risoluzione del percorso relativo con carattere jolly in C#

Sfondo: è presente un albero dei sorgenti che ogni directory può contenere il file di definizione build, che utilizza il percorso relativo con il carattere jolly per specificare i file di origine. L'attività qui è di generare un elenco di percorsi assoluti di tutti i file di origine per ogni file di definizione build.

+0

System.IO.Directory.EnumerateFiles consente di specificare i caratteri jolly nel param searchPattern, vedere : http://msdn.microsoft.com/en-us/library/dd413233.aspx e restituisce i percorsi assoluti – Polity

+0

@Polity, System.ArgumentException: il modello di ricerca non può contenere ".." per spostare le directory –

risposta

3

È possibile ottenere il percorso assoluto e poi elencare i file all'interno della directory che corrispondono al carattere jolly:

// input 
string rootDir = @"c:\foo\bar"; 
string originalPattern = @"..\blah\*.cpp"; 

// Get directory and file parts of complete relative pattern 
string pattern = Path.GetFileName (originalPattern); 
string relDir = originalPattern.Substring (0, originalPattern.Length - pattern.Length); 
// Get absolute path (root+relative) 
string absPath = Path.GetFullPath (Path.Combine (rootDir ,relDir)); 

// Search files mathing the pattern 
string[] files = Directory.GetFiles (absPath, pattern, SearchOption.TopDirectoryOnly); 
+0

Path.GetFullPath () genera ArgumentException: caratteri non validi nel percorso, se il percorso contiene un carattere jolly. –

+0

Hai ragione, ho aggiornato il mio codice in modo che il modello di ricerca relativo sia prima diviso in informazioni su directory e file e successivamente viene determinato il percorso assoluto –

+0

Funziona! Ancora meglio, piuttosto che 'string relDir = originalPattern.Substring (0, originalPattern.Length - pattern.Length);' Possiamo usare 'string relDir = Path.GetDirectoryName (originalPattern);' –

0

È semplice.

using System.IO; 
     . 
     . 
     . 
string[] files = Directory.GetFiles(@"c:\", "*.txt", SearchOption.TopDirectoryOnly);