目录枚举以跳过文件夹

2023-12-01

我有一段可爱的代码,它对我来说非常出色,只需获取多次搜索等所需的所有文件。

public static IEnumerable<string> GetFiles(string path, string searchPatternExpression = "", SearchOption searchOption = SearchOption.AllDirectories)
{
    Regex reSearchPattern = new Regex(searchPatternExpression);
    return Directory.EnumerateFiles(path, "*", searchOption)
                    .Where(file => reSearchPattern.IsMatch(System.IO.Path.GetExtension(file)));
}

但是,我不需要在我的目录之一中显示一个文件夹。我们将文件夹命名为“Narnia”。我知道有一个Directory.Skip但我不完全确定如何使用它。

调用 GetFiles() 的命令;在下面。它只是将返回的列表写入 txt 文件。我想知道我可以从那里过滤它吗?

internal static void GetFilesPassThrough(string SearchRoot, string extensions, string savepath) //GetFiles Regex Thread Start. 
{
    try
    {
        foreach (string file in GetFiles(SearchRoot, extensions))
            using (StreamWriter writer = new StreamWriter(savepath, true))
            {
                writer.WriteLine(file);
            }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message + savepath);
    }
}

附加信息

正如詹姆斯所要求的,我将更深入地介绍代码的调用方式。

*按下按钮,调用 GetFilesPassThrough(SearchDirectory, Extensions, savepath) * 扩展名是我需要从目录中报告的文件,.PDF、.txt、.xls 等 * 正如您在上面的 GetFilesPassThrough 代码中看到的,它尝试 GetFile() 并返回列表中回调的每个字符串。

*按钮 > GetFiles PassThrough> 使用 Getfiles 列出生物列表> 并写入文本文件 *


我不知道您是否想要在某处硬编码一个魔术字符串或通过某种参数传递,但您可以执行以下操作:

public static IEnumerable<string> GetFiles(
    string path, string searchPatternExpression = "",
    SearchOption searchOption = SearchOption.AllDirectories,
    params string[] toIgnore)
{
    Regex reSearchPattern = new Regex(searchPatternExpression);
    return Directory.EnumerateFiles(path, "*", searchOption)
                    .Where(file => reSearchPattern.IsMatch(System.IO.Path.GetExtension(file)))
                    .Where(file => !toIgnore.Contains(file));
}

(当然,如果您关心大小写,这很简单,但应该是一个开始。)

Edit

如果您想要不区分大小写的搜索,您可以将其更改为如下所示:

public static IEnumerable<string> GetFiles(
    string path, string searchPatternExpression = "",
    SearchOption searchOption = SearchOption.AllDirectories,
    params string[] toIgnore)
{
    var hash = new HashSet<string>(toIgnore, StringComparer.InvariantCultureIgnoreCase);
    Regex reSearchPattern = new Regex(searchPatternExpression);
    return Directory.EnumerateFiles(path, "*", searchOption)
                    .Where(file => reSearchPattern.IsMatch(System.IO.Path.GetExtension(file)))
                    .Where(file => !hash.Contains(file));
}

Edit 2

如果您想跳过目录使用给定的名称,尝试:

public static IEnumerable<string> GetFiles(
    string path, string searchPatternExpression = "",
    SearchOption searchOption = SearchOption.AllDirectories,
    params string[] toIgnore)
{
    var hash = new HashSet<string>(toIgnore, StringComparer.InvariantCultureIgnoreCase);
    Regex reSearchPattern = new Regex(searchPatternExpression);
    return Directory.EnumerateDirectories(path, "*", searchOption)
                    .Where(folder => !hash.Contains(Path.GetDirectoryName(folder)))
                    .SelectMany(x => Directory.EnumerateFiles(x, "*", searchOption));
}

请注意,这将忽略all与您的忽略集匹配的子目录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目录枚举以跳过文件夹 的相关文章

  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 当我使用 OpenSSL1.1.0g 根据固定的 p 和 g 值创建 Diffie Hellman 密钥协议密钥时,应该执行哪些检查?

    您好 我尝试通过这段代码使用修复 p 和 g 参数来制作 Diffie Hellman Keysanswer https stackoverflow com a 54538811 4706711 include

随机推荐

  • 我想为可滚动面板设置限制滚动

    我制作了一个可滚动面板 如下所示 private void button3 Click object sender EventArgs e Form f2 new Form f2 Size new Size 400 300 f2 AutoS
  • 具有动态生成的输入字段的 Angular 指令无法显示验证

    经过 3 天的搜索 stackoverflow 和其他网站后 我发现自己又回到了原点 我的任务 我需要验证动态生成的表单字段 HTML
  • 使浮动的 QDockWidget 无法获得焦点

    我正在 QDockWidget 中创建一个简单的虚拟键盘 当小部件停靠到 QMainWindow 中时 所选小部件 例如 qdoublespinbox 会突出显示 如果我单击虚拟键盘 clearFocus 就会起作用 当 QDockWidg
  • 传递给 Array.prototype.every 的函数中的“可变变量可从闭包访问”

    代码会比我说的更清楚 var candidateIndex 0 var minValue Number MAX VALUE topArray every function element index if element innerArra
  • 如何在 NSOperation 中启动异步 NSURLConnection?

    我想在后台线程上的 NSOperation 内部执行异步 NSURLConnection 这是因为当数据返回时我正在对数据进行一些非常昂贵的操作 这与他们在这里提出的问题非常相似 如何在 NSOperation 中执行异步 NSURLCon
  • 无法将 git 与 aptana 一起使用

    当我尝试将某些内容放在 git 服务器上时 它给了我一个错误 引用未定义的变量 USER 在 bash 中 echo USER 给了我正确的答案 会是什么呢 这是带有 aptana 3 插件的 eclipse 一整包 bash 会话可能设置
  • 如何在android本机代码中使用共享内存?

    我正在将现有的 Linux 应用程序移植到 Android 该应用程序正在使用共享内存 API 例如shm open etc 检查android 源码中的仿生 我发现这些 API 不受支持 因此 我在构建过程中遇到链接错误 external
  • 类的全局实例

    仍在尝试了解 C 主要使用 C 我有一个 Device 类 并且想要创建该类的实例 但也希望全局访问这些实例 因为我在 GUI 方法中经常使用它们 public class Device public string Name public
  • 在 for 循环中使用 PdfStamper 的最佳方法

    我有以下iText代码读取文件并将其添加到主 PDF 文件中 因此它基本上是在现有 PDF 的绝对位置添加 PDF 页面 主 PDF 中的绝对位置和页码将动态确定 有时它可能位于第 1 页100 100 x y 或第 2 页250 250
  • Java重载规则

    我最近遇到了两个重载问题 我找不到答案 并且没有 java 环境来运行一些测试代码 我希望有人可以帮助我整理 java 编译器在重载时遵循的所有规则的列表 或者交替地向我指出一个已经存在的列表 首先 当两个方法仅因最终 varargs 参数
  • 从导入同时保留按模块的访问权限

    标题有点难以理解 但我的问题很简单 我有一个程序需要采取sqrt 某事 但这是我唯一需要的math 为了获取单个功能而导入整个模块似乎有点浪费 我可以说from math import sqrt 但是之后sqrt 将被添加到我的程序的主命名
  • Excel:如何将包含某些文本的行复制到另一个工作表(VBA)

    我希望使用一个能够搜索所述工作表中的列的宏 如果找到某些文本 在我的例子中是 失败 一词 复制整个行数据 格式并将其粘贴到另一个工作表中 工作表就我而言 为 4 以及包含该特定文本的任何其他行 我一直在使用这段代码 但它只复制粘贴一行然后停
  • 使用 imshow 在 pyqt4 中嵌入 matplotlib

    我正在尝试做一些非常类似的事情this 不同之处在于我想使用 imshow 而不是plot 上面代码的相关部分 class MyMplCanvas FigureCanvas Ultimately this is a QWidget as w
  • 第一个列表项的 css 选择器

    我有以下 html 结构 ul li class arrow boundElement style height 40px test li ul
  • get_dummies 并一起数

    我有一个数据框 其中包含不同的 案例 作为行 其中有一个 id 和一个类别 df DataFrame id 1122 3344 5566 5566 3344 5566 1122 3344 category health transport
  • 使用 SolidColorBrush 画笔填充列表

    我正在尝试使用 WP7 1 中可用的所有预定义 SolidColorBrush 填充列表 但我在通过代码执行此操作时遇到困难 我已经使用一个简短的测试颜色列表手动完成了此操作 效果很好 但是有一百多种不同的预定义颜色 我知道必须有一个正确的
  • 未指定端点的永久重定向 s3

    我正在尝试 s3 但遇到了权限问题 我认为 Output AWS S3 PermanentRedirect in CkeditorController create The bucket you are attempting to acce
  • 推力计数发生[重复]

    这个问题在这里已经有答案了 可能的重复 计算cuda数组中数字的出现次数 有没有办法使用 Thrust 或 CUDA 来计算数组中重复项的出现次数 例如 如果我有一个设备向量 11 11 9 1 3 11 1 2 9 1 11 我应该得到
  • jquery ui 以模式方式弹出 YouTube 视频

    有没有办法使用 jQueryUI 以模式方式弹出 YouTube 视频 这是我的 YouTube 代码
  • 目录枚举以跳过文件夹

    我有一段可爱的代码 它对我来说非常出色 只需获取多次搜索等所需的所有文件 public static IEnumerable