2013-02-16 19 views
9

Mam pewien dziwny problem, gdy dodaję następujący wiersz do mojej aplikacji WPF.Directory.GetFiles() nie działa z wzorcem "."

private void button1_Click(object sender, RoutedEventArgs e) 
{ 

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

} 

Chodzi o to, że w Framework 3.5 powyższa metoda nie robi nic, nawet nie błąd, ale jeśli zmienię go ramowa 4,5 to działa !. Także jeśli używam Framework 3.5 i zmienić go w ConsolApp jak ten

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

Kod daje pewne rezultaty.

Czy ktoś ma ten sam problem?

+0

Myślę, że prawidłowy wzór wyszukiwania powinien być "\ *. \ *". Może twój kod zawiera "\ *. \ *", Ale ta strona zastąpiła \ * nic. (Miałem ten problem, gdy pisałem ten komentarz.) W takim przypadku nie wiem, jaki jest problem. aby wyświetlić \ * powinieneś napisać \\ * – Casperah

+0

Zmieniłem twój tytuł. Zobacz, "[Czy w tytułach pytania powinny znaleźć się" znaczniki "?] (Http://meta.stackexchange.com/questions/19190/)", gdzie konsensus brzmi "nie, nie powinien". –

Odpowiedz

11

Próbowałem tego i otrzymałem takie same wyniki. Wiercenie kodu źródłowego API za pomocą programu Resharper pokazuje, że wersje .NET 3.5 i 4.5 pliku Directory.GetFiles są całkowicie różne.

W szczególności .NET 4.5 wersja zawiera tę funkcję (i .NET 3.5 nie robi): ''

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

co wyjaśnia, dlaczego wzorzec wyszukiwarkę działa na platformie .NET 4.5, ale nie w wersji 3.5.

Powinieneś użyć "*" lub "*. *" Dla zgodności.

+1

Z ciekawości i kompletności: co z 4.0? – JustAnotherUserYouMayKnow

+2

"." działa również na 4.0. – Phil

+4

+1. Unikałbym używania "." W systemie Windows "." zwykle oznacza "current dierctory" (".." jest rodzicem), więc osobiście nie widzę powodu, dla którego "tylko katalog bieżący" oznacza "wszystkie pliki w danym folderze". Założę się, że większość ludzi będzie całkowicie zaintrygowana, wywołując 'GetFiles' with". " jako wzór. –

Powiązane problemy