2016-05-01 18 views
0

Vor kurzem ich auf meiner Klassenzuordnung arbeite, in denen ich brauche mehr Dateien aus einem Verzeichnis mit verschiedenen Erweiterungen zu erhalten. Ich benutze diesen Code:Directory.GetFiles() Methode in C#

List<string> Extensions =new List<string>() ; 
    Extensions.InsertRange(3, new string[] { "*.txt", "*.htt","*.bat"}); 
    FolderBrowserDialog _fBrowser = new FolderBrowserDialog(); 
    if (_fBrowser.ShowDialog() == DialogResult.OK) 
    { 
     tbPath.Text = _fBrowser.SelectedPath; 
     foreach (var item in Extensions) 
     { 
      SearchFiles(item);  
     } 

    } 

In SearchFile() ich diese Linie verwenden, um eine Datei auf Basis der Erweiterung suchen:

 private void SearchFile(string extension) 
    { 
     Files = Directory.GetFiles(tbPath.Text, extension).ToList(); 
    } 

Wenn ich Dateien mit .txt suchen möchten , .htt und .bat Erweiterungen aus einem Verzeichnis und wenn es keine Datei mit .txt Erweiterung im aktuellen Verzeichnis gibt dann ist es eine Ausnahme verursachen, dass „Pfad nicht legal ist“ aber ich will Suche auf Basis der nächsten Erweiterung (.htt) fortzusetzen. Was kann ich tun?

+0

Was ist die eigentliche Ausnahme? –

Antwort

2

Verwenden try catch-Block

List<string> Extensions =new List<string>() ; 
    Extensions.InsertRange(3, new string[] { "*.txt", "*.htt","*.bat"}); 
    FolderBrowserDialog _fBrowser = new FolderBrowserDialog(); 
    if (_fBrowser.ShowDialog() == DialogResult.OK) 
    { 
     tbPath.Text = _fBrowser.SelectedPath; 
     foreach (var item in Extensions) 
     { 
      try{ 
       SearchFiles(item); 
       } 
      catch(Exception ex) { }; 
     } 

    } 
+0

Ich würde lieber vermeiden, Ausnahme-Fänge in einem normalen Fluss zu verwenden. Außerdem schluckt dieser Code jede Ausnahme und kann andere Probleme verbergen. –

+0

ja, es wird mir von der Laufzeit Ausnahme verhindern, aber ich möchte mit der nächsten Erweiterung fortzusetzen. –

+1

Ok ... aber dieser Code ist ein glattes dia, das ursprüngliche Problem zu ignorieren, die verstanden wird, nicht. Es ist ein niedriger Gesundheitscode. Die MSDN-Dokumentation besagt, dass die Methode eine leere Liste zurückgeben sollte und eine Ausnahme nicht auflistet, die Sie beschreiben. Da ist noch etwas anderes, denke ich. –

3

Sie so etwas wie dieses verwenden können:

var extensions = new string[] { ".txt", ".htt", ".bat" }; 

var foundFiles = Directory.EnumerateFiles(path, "*.*") 
    .Where(file => extensions.Contains(Path.GetExtension(file), StringComparer.OrdinalIgnoreCase));