2013-02-16 5 views
9

Ho qualche strano problema quando sto aggiungendo la seguente riga nella mia app WPF.Directory.GetFiles() non funziona con uno schema di "."

private void button1_Click(object sender, RoutedEventArgs e) 
{ 

    foreach(string files in Directory.GetFiles(path,".",SearchOption.TopDirectoryOnly)) 
     tb_FileBrowse.Text = files; 

} 

Il fatto è che in Framework 3.5 il metodo di cui sopra non fa nulla, nemmeno un errore, ma se cambio a Framework 4.5 funziona !. Anche se sto usando Framework 3.5 e cambiare in ConsolApp come questo

foreach (string files in Directory.GetFiles(path, ".", SearchOption.TopDirectoryOnly)) 
{ 
    Console.WriteLine("{0}",files); 
} 

Il codice di dare qualche risultato.

Qualcuno ha lo stesso problema?

+0

Penso che il modello di ricerca corretto dovrebbe essere "\ *. \ *". Magari il tuo codice contiene "\ *. \ *" Ma questo sito ha sostituito il \ * con niente. (Ho avuto questo problema quando ho scritto questo commento.) In quel caso non so quale sia il problema. per visualizzare un \ * dovresti scrivere \\ * – Casperah

+0

Ho modificato il tuo titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –

risposta

11

Ho provato questo e ottenuto gli stessi risultati. Il drill-up nel codice sorgente dell'API con Resharper rivela che le versioni .NET 3.5 e 4.5 di Directory.GetFiles sono completamente diverse.

In particolare la versione di .NET 4.5 contiene questa funzione (e .NET 3.5 non):

private static string NormalizeSearchPattern(string searchPattern) 
{ 
    string searchPattern1 = searchPattern.TrimEnd(Path.TrimEndChars); 
    if (searchPattern1.Equals(".")) 
    searchPattern1 = "*"; 
    Path.CheckSearchPattern(searchPattern1); 
    return searchPattern1; 
} 

Il che spiega il motivo per cui un modello di ricerca di '' funziona su .NET 4.5 ma non su 3.5.

si consiglia di utilizzare '*' o '*. *' Per la compatibilità.

+1

Per curiosità e completezza: che dire di 4.0? – JustAnotherUserYouMayKnow

+2

'.' funziona anche su 4.0. – Phil

+4

+1. Eviterei di usare "." In Windows "." di solito significa "corrente dierctory" (".." è padre) quindi personalmente non vedo alcun motivo per cui "solo la directory corrente" significa "tutti i file nella cartella specificata". Scommetto che la maggior parte delle persone sarà completamente perplessa chiamando 'GetFiles' con". " come modello. –