2016-05-01 82 views
0

最近我正在处理我的课堂作业,其中我需要从具有不同扩展名的目录中获取多个 文件。 我用这个代码:C#中的Directory.GetFiles()方法#

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);  
     } 

    } 

SearchFile()我用这条线来搜索上延伸的基础文件:

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

如果我想搜索与.TXT文件.htt.bat从一个目录扩展,如果没有任何文件与.txt扩展名在当前目录那么它会导致例外“路径不合法”但我想继续搜索下一个扩展名(.htt)。 我能做什么?

+0

什么实际的异常? –

回答

2

使用try catch块

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

我宁愿避免在正常流程中使用异常捕获。此外,此代码会吞噬任何异常并可能隐藏其他问题。 –

+0

是的,它会阻止我运行时异常,但我想继续下一个扩展。 –

+1

好的...但是这个代码是一个忽略原始问题的滑溜,这是不明白的。这是低健康代码。 MSDN文档说该方法应该返回一个空列表,并且不会列出您描述的异常。我想这里还有其他的错误。 –

3

您可以使用这样的事情:

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

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