【问题标题】:Directory.GetFiles() method in C#C# 中的 Directory.GetFiles() 方法
【发布时间】:2016-05-01 18:26:55
【问题描述】:

最近我正在做我的课堂作业,我需要获得多个 来自具有不同扩展名的目录的文件。 我使用此代码:

    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 )。 我可以做什么?

【问题讨论】:

  • 实际的异常是什么?

标签: c#


【解决方案1】:

你可以这样使用:

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

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

【讨论】:

    【解决方案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) { };
            }
    
        }
    

    【讨论】:

    • 我宁愿避免在正常流程中使用异常捕获。此外,此代码会吞下任何异常并可能隐藏其他问题。
    • 是的,它会阻止我运行时异常,但我想继续下一个扩展。
    • 好的...但是这段代码是忽略原始问题的滑滑梯,无法理解。这是低健康码。 MSDN 文档说该方法应该返回一个空列表,并且不会像您描述的那样列出异常。我认为这里还有其他问题。
    • 是的,我摆脱了这个......还有另一个问题是对非法路径施加例外......我正在使用另一个检查路径的有效性,这是主要来源这个异常......删除后检查我的代码没有这个异常......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多