当前位置: 首页 > news >正文

在C#中测试比较目录的不同方法以查看它们有哪些共同的文件

C# 中的示例“比较目录以查看它们有哪些共同的文件”使用Directory.GetFiles获取两个目录中的文件。它对文件进行排序,并比较两个排序后的列表以查看哪些文件位于第一个目录中、第二个目录中或两个目录中。有关其工作原理的详细信息,请参阅该示例。

Kuru 发表了一条评论,称 LINQ 更简单,可读性更强。此示例比较了原始代码和两种 LINQ 方法。

第一种 LINQ 方法使用 LINQ 从目录中选择文件并对其进行排序。然后像以前一样循环遍历排序后的列表,以查看哪些文件位于哪个目录中。以下代码显示了此方法如何使用 LINQ 选择文件。

// Use LINQ twice to compare the files in each directory.
private void Compare_LinqTwice(string dir1, string dir2)
{// Get sorted lists of files in the directories.DirectoryInfo dir1_info = new DirectoryInfo(dir1);var dir1_query =from FileInfo file_info in dir1_info.GetFiles()orderby file_info.Nameselect file_info.Name;string[] file_names1 = dir1_query.ToArray();DirectoryInfo dir2_info = new DirectoryInfo(dir2);var dir2_query =from FileInfo file_info in dir2_info.GetFiles()orderby file_info.Nameselect file_info.Name;string[] file_names2 = dir2_query.ToArray();// Compare....
}

此代码为第一个目录创建了一个DirectoryInfo对象。LINQ 查询使用该对象的GetFiles方法获取表示目录文件的FileInfo对象的可枚举列表。它按FileInfo对象的名称对结果进行排序,然后选择这些名称。然后,程序调用查询的ToArray方法将结果复制到字符串数组中。

代码重复这些步骤以获得包含第二个目录的文件名的排序数组。然后像上一个示例一样比较这两个数组。

以下代码展示了第三种方法。(Kuru 建议的方法。)

// Use LINQ joins to compare the files in each directory.
private void Compare_LinqJoins(string dir1, string dir2)
{// Get sorted lists of files in the directories.DirectoryInfo dir1_info = new DirectoryInfo(dir1);var dir1_query =from FileInfo file_info in dir1_info.GetFiles()//orderby file_info.Nameselect file_info.Name;string[] file_names1 = dir1_query.ToArray();DirectoryInfo dir2_info = new DirectoryInfo(dir2);var dir2_query =from FileInfo file_info in dir2_info.GetFiles()//orderby file_info.Nameselect file_info.Name;string[] file_names2 = dir2_query.ToArray();// Compare.var dir1_only_query =from string file_name in file_names1where (!file_names2.Contains(file_name))select file_name;List<string> dir1_only = dir1_only_query.ToList();var dir2_only_query =from string file_name in file_names2where (!file_names1.Contains(file_name))select file_name;List<string> dir2_only = dir2_only_query.ToList();var both_query =from string file_name in file_names1where (file_names2.Contains(file_name))select file_name;List<string> both = both_query.ToList();
}

此方法使用DirectoryInfo对象和 LINQ 来获取包含目录文件的数组(如前所述)。此程序不再循环遍历名称数组,而是使用三个 LINQ 查询来选择仅存在于第一个目录中、仅存在于第二个目录中或同时存在于两个目录中的文件。

所有三种方法都将结果存储在List中,而不是像原始示例那样将结果显示在DataGridView中。该程序对每种方法运行 10 次试验,以获得足够有意义的时间。

如果你仔细看文章顶部的图片,你会发现原始方法是最快的。第二种使用 LINQ 选择文件的方法花费的时间大约长 50%。

第三种方法使用 LINQ 来确定哪些文件位于哪些目录中,耗时几乎是第一种方法的 10 倍。它当然更简单,而且您可能会发现它比第一种方法更容易阅读,但它要慢得多。

(我也尝试使用第三种方法,但最后三个 LINQ 查询从前两个查询中选择数据,而不是从文件名数组中选择数据。这样速度要慢得多。几分钟后我就等得不耐烦了,于是就停止了程序。)

例如结果:

相关文章:

在C#中测试比较目录的不同方法以查看它们有哪些共同的文件

C# 中的示例“比较目录以查看它们有哪些共同的文件”使用Directory.GetFiles获取两个目录中的文件。它对文件进行排序&#xff0c;并比较两个排序后的列表以查看哪些文件位于第一个目录中、第二个目录中或两个目录中。有关其工作原理的详细信息&#xff0c;请参阅该示例。 Kur…...

harbor离线安装 配置https 全程记录

1. 下载harbor最新版本 下载网址: 找最新的版本: https://github.com/goharbor/harbor/releases/download/v2.11.2/harbor-offline-installer-v2.11.2.tgz 这里我直接使用迅雷下载, 然后上传 1.1解压 sudo tar -xf harbor-offline-installer-v2.11.2.tgz -C /opt/ 2. 配置Harb…...

C++简明教程(文章要求学过一点C语言)(5)

在开始之前必须阅读这个文章 https://blog.csdn.net/weixin_45100742/article/details/135152562 这篇文章完全是对C语言的补课&#xff0c;如果C语言学的好&#xff0c;可跳过。 变量、数据类型与运算符 在 C 编程中&#xff0c;理解变量、数据类型和运算符是构建程序的基石…...

Halcon单相机+机器人=眼在手上#标定心得

首先&#xff0c;这个标定板肯定是放在我们要作业的工作台上的 目的 **1&#xff0c;得到标定物&#xff08;工作台&#xff09;与机器人底座之间的pose转换关系。2&#xff0c;得到相机与机器人末端tool的的转换关系。 两个不确定的定量 1&#xff0c;标定板与机器人底座b…...

【hackmyvm】Diophante 靶场

1. 基本信息^toc 这里写目录标题 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描2.3. knock 3. WordPress利用3.1. wpscan扫描3.2. smtp上传后门 4. 提权4.1. 提权leonard用户4.2. LD劫持提权root 靶机链接 https://hackmyvm.eu/machines/machine.php?vmDiophante 作者…...

C++类的继承关系中什么时候要用到上行转换和下行转换

一、C类继承关系中的上行转换 1. 多态性实现 在C中&#xff0c;上行转换&#xff08;将派生类转换为基类&#xff09;是实现多态性的关键。例如&#xff0c;当有一个基类Animal&#xff0c;以及派生类Dog和Cat。如果有一个函数接受Animal类型的参数&#xff0c;我们可以将Dog或…...

Ubuntu 22.04永久保存路由

在 Ubuntu 22.04 上&#xff0c;可以按照以下方式配置让流量访问 172.19.201.207 走指定的路由。 1. 临时添加路由 临时路由规则只在当前系统会话中有效&#xff0c;重启后会丢失。 添加路由规则 运行以下命令&#xff1a; sudo ip route add 172.19.201.207 via 192.168.2…...

数据结构十大排序之(冒泡,快排,并归)

接上期&#xff1a; 数据结十大排序之&#xff08;选排&#xff0c;希尔&#xff0c;插排&#xff0c;堆排&#xff09;-CSDN博客 前言&#xff1a; 在计算机科学中&#xff0c;排序算法是最基础且最重要的算法之一。无论是大规模数据处理还是日常的小型程序开发&#xff0c;…...

OpenFeign源码

openfeign是通过FeignClientFactoryBean生成动态代理对象的方式实现http客户端无感调用&#xff0c;可以做到像定义接口一样写http客户端调用代码。 配置Feign接口后&#xff0c;我们通常会在SpringBoot项目启动类上标记EnableFeignClients&#xff0c;这个是生成动态代理对象的…...

sql server索引优化语句

第一步 建一个测试表 --create table TestUsers --( -- Id int primary key identity(1,1), -- Username varchar(30) not null, -- Password varchar(10) not null, -- CreateDateTime datetime not null --)第二步 插入100w数据 大概1分钟执行时间 ----插入数据…...

深度学习之超分辨率算法——SRGAN

更新版本 实现了生成对抗网络在超分辨率上的使用 更新了损失函数&#xff0c;增加先验函数 SRresnet实现 import torch import torchvision from torch import nnclass ConvBlock(nn.Module):def __init__(self, kernel_size3, stride1, n_inchannels64):super(ConvBlock…...

16.2、网络安全风险评估技术与攻击

目录 网络安全风险评估技术方法与工具 网络安全风险评估技术方法与工具 资产信息收集&#xff0c;可以通过调查表的形式把我们各类的资产信息进行一个统计和收集&#xff0c;掌握被评估对象的重要资产分布&#xff0c;进而分析这些资产关联的业务面临的安全威胁以及存在的安全…...

【项目管理】GDB调试

gdb&#xff08;GNU Debugger&#xff09; 是 Linux 和嵌入式开发中最常用的调试工具之一&#xff0c;可以用来调试 C/C 程序、排查崩溃、分析程序流程等。在嵌入式开发中&#xff0c;gdb 还可以通过远程调试&#xff08;gdbserver&#xff09;调试目标设备上的程序。 这篇文章…...

ChatGPT生成接口测试用例(一)

用ChatGPT做软件测试 接口测试在软件开发生命周期中扮演着至关重要的角色&#xff0c;有助于验证不同模块之间的交互是否正确。若协议消息被恶意修改&#xff0c;系统是否能够恰当处理&#xff0c;以确保系统的功能正常运行&#xff0c;不会出现宕机或者安全问题。 5.1 ChatGP…...

2024 年 IA 技术大爆发深度解析

摘要&#xff1a; 本文旨在深入剖析 2024 年 IA 技术大爆发所引发的多方面反响。通过对产业变革、经济影响、就业市场、社会影响、政策与监管以及未来展望等维度的探讨&#xff0c;揭示 IA 技术在这一关键时期对全球各个层面带来的深刻变革与挑战&#xff0c;并提出相应的思考与…...

如何进行js后台框架搭建(树形菜单,面包屑,全屏功能,刷新功能,监听页面刷新功能)

框架功能是后台高亮不可缺少的功能&#xff0c;基本上所有的后台都需要框架功能&#xff0c;下面是我制作好的一个效果图 下面是我的框架里面功能的具体讲解&#xff0c;还有完整的代码示例 1.声明的变量 // 声明一个用于判断个人信息显示变量 let myes 0; // 声明一个用于切…...

多目标优化常用方法:pareto最优解

生产实际中的许多优化问题大都是多目标问题&#xff0c;举个例子&#xff1a;我们想换一份工资高、压力小、离家近的新工作&#xff0c;这里工资高、压力小、离家近就是我们的目标&#xff0c;显然这是一个多目标问题&#xff0c;那我们肯定想找到这三个目标同时最优的工作&…...

Vue.js实例开发-如何通过Props传递数据

props 是父组件用来传递数据给子组件的一种机制。通过 props&#xff0c;你可以将数据从父组件“传递”到子组件&#xff0c;并在子组件的模板和逻辑中使用这些数据。 1. 定义子组件并接收 props 首先&#xff0c;定义一个子组件&#xff0c;并在该组件中声明它期望接收的 pr…...

由popover框一起的操作demo问题

场景&#xff1a; 当popover框弹出的时候&#xff0c;又有MessageBox 提示&#xff0c;此时关闭MessageBox 提示&#xff0c;popover就关闭了。将popover改为手动激活&#xff0c;可以解决这个问题&#xff0c;但是会引起另外一个问题&#xff0c;之前&#xff08;click触发的时…...

人工智能ACA(四)--机器学习基础

零、参考资料 一篇文章完全搞懂正则化&#xff08;Regularization&#xff09;-CSDN博客 一、 机器学习概述 0. 机器学习的层次结构 学习范式&#xff08;最高层&#xff09; 怎么学 监督学习 无监督学习 半监督学习 强化学习 学习任务&#xff08;中间层&#xff0…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...