首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取路径中的所有文件(递归)

获取路径中的所有文件(递归)
EN

Stack Overflow用户
提问于 2012-12-19 04:31:43
回答 3查看 303关注 0票数 0

我编写了一个方法,该方法需要查找路径中的所有文件,并且我希望使用递归获取所有文件。下面是我当前的方法:

代码语言:javascript
复制
public void doStart(DirectoryInfo dir, string filePattern)
        {
            try
            {
                foreach (FileInfo fileInfo in dir.GetFiles(filePattern))
                {
                    if (fileFound != null)
                    {
                        fileFound(fileInfo);
                    }
                }
            }
            catch (Exception)
            {

            }

            try
            {
                foreach (DirectoryInfo dirInfo in dir.GetDirectories())
                {
                    doStart(dirInfo, filePattern);
                }
            }
            catch (Exception)
            {

            }
        }

        public void Start(string path, string filePattern)
        {
            doStart(new DirectoryInfo(path), filePattern);
        }

有没有更好的方法来编写这种递归,或者这足够好了吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-19 04:36:50

尝试如下所示:

代码语言:javascript
复制
string[] filePaths = Directory.GetFiles(@dir, "*.filetype", SearchOption.AllDirectories);

这将递归地查找目录,查找具有特定文件类型('.filetype')的所有文件,并返回包含所有找到的文件的字符串数组。

另外,我建议不要使用空的catch块,因为您的应用程序不会让您知道是否出现了错误。要么显示一个消息框(或类似的内容),要么将其记录到数据库或其他什么地方。

此外,如果子目录中有一个子目录,DoStart()方法会做什么?据我所见,它只在一个子层上搜索。

票数 7
EN

Stack Overflow用户

发布于 2012-12-19 04:37:27

  1. 不接受所有异常。如果您需要忽略特定的异常,请捕获这些异常,但让其他异常冒泡出来。
  2. (Style)方法应该是PascalCased (例如,DoStart和`FileFound'
  3. (style)创建一个OnFileFound方法,而不是直接调用FileFound (我假设fileFound是一个事件处理程序?)

除此之外,它对我来说看起来很好。

票数 1
EN

Stack Overflow用户

发布于 2012-12-19 04:49:16

这是一个真正的递归的例子。这将进行搜索,直到不再有子目录可供查找,这与Directory.GetFiles SearchOption.AllDirectories不同。您可以对此进行修改,以将搜索筛选器作为参数添加。

代码语言:javascript
复制
public IEnumerable<string> GetFilesRecursive(string ParentDirectory)
{
    string[] subDirectories = Directory.GetDirectories(ParentDirectory);
    foreach (string file in Directory.GetFiles(ParentDirectory))
    {
        yield return file;
    }

    foreach (string subDirectory in subDirectories)
    {
        foreach (string file in GetFilesRecursive(subDirectory))
        {
            yield return file;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13940980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档