在所有子目录中搜索某些文件,跳过一些文件夹 [英] searching all subdirectories for certain files, skipping some folders

查看:194
本文介绍了在所有子目录中搜索某些文件,跳过一些文件夹的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获取具有特定扩展名的所有文件的所有路径,但要跳过某些文件夹.我使用此代码可以正常工作,但不排除指定的文件夹.

I want to get all paths to all files with a certain extension but skipping certain folders. I use this code which works fine but does not exclude the specified folders.

public static IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOpt)
{
    try
    {
        var dirFiles = Enumerable.Empty<string>();
        if (searchOpt == SearchOption.AllDirectories)
        {
            dirFiles = Directory.EnumerateDirectories(path)
                .Where(y => !y.Contains("Program Files") || !y.Contains("Windows"))
                .SelectMany(x => EnumerateFiles(x, searchPattern, searchOpt));
        }
        return dirFiles.Concat(Directory.EnumerateFiles(path, searchPattern));
    }
    catch (UnauthorizedAccessException ex)
    {
        return Enumerable.Empty<string>();
    }
}

但是根据我对其他问题的研究,这正是我应该做的.请问我要去哪里错了?

But based on my research of other questions this is exactly what I should be doing. Where am I going wrong please?

用法是:

var enumerable = EnumerateFiles(@"C:\", "*.jpg", SearchOption.AllDirectories);

推荐答案

我想您想排除Program Files Windows,所以请使用&&而不是||.

I guess that you want to exlude Program Files and Windows, so use && instead of ||.

.Where(y => !y.Contains("Program Files") && !y.Contains("Windows"))

这篇关于在所有子目录中搜索某些文件,跳过一些文件夹的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆