在 C# 中搜索子目录

2024-01-08

我有一个文件名列表,我想搜索一个目录及其所有子目录。这些目录每个包含大约 200,000 个文件。我的代码找到该文件,但每个文件大约需要 20 分钟。有人可以建议更好的方法吗?

代码片段

String[] file_names = File.ReadAllLines(@"C:\file.txt");
foreach(string file_name in file_names) 
{
    string[] files = Directory.GetFiles(@"I:\pax\", file_name + ".txt",
                                        SearchOption.AllDirectories);
    foreach(string file in files)
    {
        System.IO.File.Copy(file, 
                            @"C:\" + 
                            textBox1.Text + @"\N\O\" + 
                            file_name + 
                            ".txt"
                            );
    }

}

如果您在同一目录结构中搜索多个文件,您应该找到all该目录结构中的文件一次,然后在内存中搜索它们。无需一次又一次地访问文件系统。

编辑:有一种优雅的方法可以做到这一点,使用 LINQ - 以及不那么优雅的方法。这是 LINQ 方式:

using System;
using System.IO;
using System.Linq;

class Test
{
    static void Main()
    {
        // This creates a lookup from filename to the set of 
        // directories containing that file
        var textFiles = 
            Directory.GetFiles("I:\\pax", "*.txt", SearchOption.AllDirectories)
                     .ToLookup(file => Path.GetFileName(file),
                               file => Path.GetDirectoryName(file));

        string[] fileNames = File.ReadAllLines(@"c:\file.txt");
        // Remove the quotes for your real code :)
        string targetDirectory = "C:\\" + "textBox1.Text" + @"\\N\\O\\";

        foreach (string fileName in fileNames)
        {
            string tmp = fileName + ".txt";
            foreach (string directory in textFiles[tmp])
            {
                string source = Path.Combine(directory, tmp);
                string target = Path.Combine(targetDirectory, tmp);
                File.Copy(source, target);                                       
            }
        }
    }
}

如果您需要非 LINQ 方式,请告诉我。不过,在这样做之前需要检查一件事 - 这可能会复制多个文件。就是它really你想做什么? (想象一下a.txt存在于多个地方,并且“a”在文件中。)

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

在 C# 中搜索子目录 的相关文章

  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • 限制C#中的并行线程数

    我正在编写一个 C 程序来生成并通过 FTP 上传 50 万个文件 我想并行处理4个文件 因为机器有4个核心 文件生成需要更长的时间 是否可以将以下 Powershell 示例转换为 C 或者是否有更好的框架 例如 C 中的 Actor 框
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob

随机推荐

  • 如何组合“conda create”参数“--file”、“--prefix”和“--copy”?

    我想基于特定路径中的环境文件创建一个 conda 环境 不使用符号链接 因此 我想运行以下 conda 命令 conda create file environment yml prefix python copy 文件environmen
  • 增加 PHP 脚本执行时间 [重复]

    这个问题在这里已经有答案了 我想使用 PHP 发送数百封电子邮件 为了增加执行时间 我使用了ini set 最大执行时间 10 但发送后30电子邮件浏览器向我显示一个空白页面 并且不发送所有电子邮件 我还将限制更改为 300 600 Try
  • http 跟踪实用程序

    我需要跟踪 嗅探来自其他机器的 http 流量 例如来自我的 Android 手机或 ios 设备 过去我使用MSSOAPT 这里描述http www devproconnections com article net framework2
  • 在 Perl 中,如何按值的频率排序?

    我正在尝试创建一个程序来计算数据文件列中出现的不同值 因此 如果一列的可能值为 A B C 则输出类似于 A 456 B 234 C 344 通过执行以下操作 我可以轻松获得 A B 和 C 的运行计数 my count for my f
  • 使用 Mono.Cecil 替换对类型/命名空间的引用

    背景 不必要的 令人困惑的 仅供好奇的人使用 我正在使用 Unity3D for Mobile 的免费版本 它不允许我使用System Net Sockets移动设备上的命名空间 问题是我正在使用编译的 dll引用的库 即 IKVM Sys
  • Haskell 脸书示例

    我被 haskell 类型困住了 LANGUAGE OverloadedStrings module Main main where import qualified Facebook as FB import Network HTTP C
  • 如何使用 powershell 在 wsl 上运行 bash 脚本?

    在 Windows 上的当前目录中 我有以下脚本文件 simple script sh bin bash echo hi from simple script 我希望通过 powershell 命令行在 wsl 上运行此脚本 使用wsl命令
  • 自动将 Sybase .ADT 文件转换为 SQL

    我正在处理我获得的一些数据 这些数据是通过使用嵌入式 Advantage 数据库服务器的程序读取的 该程序不是我编写的 并且不具备我需要的所有功能 我想将这些数据转换为不同的格式 以便我可以更自由地使用它 例如 MySQL 我知道Sybas
  • 防止将重复的项目添加到列表框中

    我有这段代码用于添加选定的项目ListBox到另一个 如何防止用户重复添加某个项目 我想要ListBox他们正在添加lstBoxToUserProjects仅包含不同的项目 没有重复的条目 protected void btnAddSele
  • AsyncTask 错误中的 Android JSON

    我正在尝试使用 asynctask 从 google 获取 JSON 数据 但我收到很多错误 我不知道为什么 我是 Android 开发的新手 我对它很感兴趣 然后又退出了 P 然后单击执行异步任务的按钮 new usdjson execu
  • 使用 Yii 自动存储日期时间

    我开始使用 Yii 学习 php 我有一个很大的问题 也许你可以帮助我 我正在使用表单来创建用户 我想将表单中引入的用户数据存储到数据库 MySQL 中 但我还必须将日期和时间存储在数据库的日期时间字段中 我看到一些扩展如 CJUIDATE
  • TYPO3:从 Extbase 中的文件引用中获取路径

    我使用 Fluid 和 Extbase TYPO3 6 1 创建了一个自定义内容元素 您可以在其中定义图片 在图片设置中 我可以设置一个img链接 它的目标是一个文件 在我的控制器中我可以访问这些数据 this gt configurati
  • webkit 中的 CSS3 动画暂停/取消暂停跳过和跳跃

    我已经实现了动画暂停 如下所述 如何使用 JavaScript 暂停和恢复 CSS3 动画 https stackoverflow com questions 5804444 how to pause and resume css3 ani
  • XAML:DataTemplate 中的自定义绑定用于 GridViewColumn CellTemplate

    我希望在整个 GridView 中重用资源中的以下 DataTemplate
  • 如何实现hashCode和equals方法

    我应该如何实施hashCode and equals 对于 Java 中的以下类 class Emp int empid unique across all the departments String name String dept n
  • 高分辨率的响应式字体大小在 MUI 5 中不起作用

    我在用材质 UI v5 https mui com 在我的 React 应用程序中 并使用响应式字体大小 https mui com customization theming responsivefontsizes theme optio
  • Android:findViewById() 方法返回我们不需要转换的值

    因为我厌倦了为每个人编写一个强制转换运算符Activity findViewById 返回原始数据View 我终于尝试了互联网建议的一种方法 http biginteger blogspot jp 2011 04 better findvi
  • C#:Func<> 而不是方法? [复制]

    这个问题在这里已经有答案了 这是一个让大家好奇的问题 使用 Func 而不是方法有什么坏处 缺点吗 简单的例子 private static Func
  • Glide 不接受 GifDrawable 作为目标参数

    我试图用 glide 找出 gif 的结尾 这是我在网上找到的代码 Glide with thisActivity asGif load R raw logo gif motion low listener object RequestLi
  • 在 C# 中搜索子目录

    我有一个文件名列表 我想搜索一个目录及其所有子目录 这些目录每个包含大约 200 000 个文件 我的代码找到该文件 但每个文件大约需要 20 分钟 有人可以建议更好的方法吗 代码片段 String file names File Read