C#文件夹基本操作(判断文件夹是否存在、创建文件夹、移动文件夹、删除文件夹以及遍历文件夹中的文件)
目录
一、判断文件夹是否存在
1.Directory类的Exists()方法
2. DirectoryInfo类的Exists属性
二、创建文件夹
1. Directory类的CreateDirectory()方法
2.DirectoryInfo类的Create()方法
三、移动文件夹
1. Directory类的Move()方法
2.DirectoryInfo类的MoveTo()方法
四、删除文件夹
1. Directory类的Delete()方法
2.DirectoryInfo类的Delete()方法
五、遍历文件夹
1.GetDirectories()方法
2.GetFiles()方法
3.GetFileSystemInfos()方法
4.示例
(1)源码
(2)生成效果
判断文件夹是否存在时,可以使用Directory类的Exists()方法或者DirectoryInfo类的Exists属性来实现。
一、判断文件夹是否存在
1.Directory类的Exists()方法
Exists()方法用于确定给定路径是否引用磁盘上的现有目录,语法如下。
public static bool Exists (string path)
☑ path:要测试的路径。
☑ 返回值:如果path引用现有目录,则为true;否则为false。允许path参数指定相对或绝对路径信息。
相对路径信息被解释为相对于当前的工作目录。
//使用Directory类的Exists()方法判断C盘根目录下是否存在Test文件夹。
Directory.Exists("C:\\Test ");
2. DirectoryInfo类的Exists属性
获取指示目录是否存在的值,语法如下。
public override bool Exists{get;}
属性值:如果目录存在,则为true;否则为false。
//调用DirectoryInfo类中的Exists属性判断C盘根目录下是否存在Test文件夹
Directorylnfo dinfo =new Directorylnfo ("C:\\Test");
if (dinfo.Exists)
{}
二、创建文件夹
创建文件夹可以使用Directory类的CreateDirectory()方法或者DirectoryInfo类的Create()方法来实现。
1. Directory类的CreateDirectory()方法
CreateDirectory()方法为可重载方法,它有以下两种重载形式。
public static DirectoryInfo CreateDirectory (string path)
public static DirectoryInfo CreateDirectory (string path,DirectorySecurity directorySecurity)
☑ path:要创建的目录路径。
☑ directorySecurity:要应用于此目录的访问控制。
☑ 返回值:第一种重载形式的返回值为由path指定的DirectoryInfo;第二种重载形式的返回值为新创建的目录的DirectoryInfo对象。
当path参数中的目录已经存在或者path的某些部分无效时,将发生异常。path参数指定目录路径,而不是文件路径。
//调用Directory类的CreateDirectory()方法在C盘根目录下创建一个Test文件夹
Directory.CreateDirectory ("C:\\Test ");
2.DirectoryInfo类的Create()方法
Create()方法为可重载方法,它有以下两种重载形式。
public void Create ()
public void Create (DirectorySecurity directorySecurity)
directorySecurity:主要应用于此目录的访问控制。
//调用DirectoryInfo类的Create()方法在C盘根目录下创建一个Test文件夹
Directorylnfo dinfo =new DirectoryInfo ("C:\\Test ");
dinfo.Create();
三、移动文件夹
移动文件夹时,可以使用Directory类的Move()方法或者DirectoryInfo类的MoveTo()方法来实现。
1. Directory类的Move()方法
Move()方法用于将文件或目录及其内容移到新位置,语法如下。
public static void Move (string sourceDirName,string destDirName)
☑ sourceDirName:要移动的文件或目录的路径。
☑ destDirName:指向sourceDirName的新位置的路径。
//调用Directory类的Move()方法将C盘根目录下的Test文件夹移动到C盘根目录下的“新建文件夹”文件夹中
Directory.Move("C:\\Test","C:\\新建文件夹NTest");
使用Move()方法和MoveTo()方法移动文件夹时需要统一磁盘根目录,例如,C盘下的文件夹只能移动到C盘中的某个文件夹下。
2.DirectoryInfo类的MoveTo()方法
MoveTo()方法用于将DirectoryInfo对象及其内容移动到新路径,语法如下。
public void MoveTo (string destDirName)
destDirName:要将此目录移动到的目标位置的名称和路径。目标不能是另一个具有相同名称的磁盘卷或目录,它可以是要将此目录作为子目录添加到其中的一个现有目录。
//调用DirectoryInfo类的MoveTo()方法将C盘根目录下的Test文件夹
//移动到C盘根目录下的“新建文件夹”文件夹中
Directorylnfo dinfo =new Directorylnfo ("C:\\Test ");
dinfo.MoveTo("C:\\新建文件夹\\Test");
四、删除文件夹
删除文件夹可以使用Directory类的Delete()方法或者DirectoryInfo类的Delete()方法来实现。
1. Directory类的Delete()方法
Delete()方法为可重载方法,它有以下两种重载形式。
public static void Delete(string path)
public static void Delete(string path,bool recursive)
☑ path:要移除的空目录/目录的名称。
☑ recursive:若要移除path中的目录、子目录和文件,则为true;否则为false。
//调用Directory类的Delete()方法删除C盘根目录下的Test文件夹
Directory.Delete("C:\\Test");
2.DirectoryInfo类的Delete()方法
Delete()方法是指永久删除文件,语法如下。
public override void Delete()
public void Delete(bool recursive)
recursive:若为true,则删除此目录、其子目录以及所有文件;否则为false。
第一种重载形式,如果DirectoryInfo为空,则删除它;第二种重载形式,删除DirectoryInfo对象,并指定是否要删除子目录和文件。
//调用DirectoryInfo类的Delete()方法删除C盘根目录下的Test文件夹
Directorylnfo dinfo =new Directorylnfo ("C:\\Test");
dinfo.Delete()
五、遍历文件夹
1.GetDirectories()方法
GetDirectories()方法用来返回当前目录的子目录。该方法为可重载方法,它有以下3种重载形式。
public DirectoryInfo[]GetDirectories()
public Directorylnfo[]GetDirectories(string searchPattern)
public Directorylnfo[]GetDirectories(string searchPattern,SearchOption searchOption)
☑ searchPattern:搜索字符串,如用于搜索所有以单词System开头的目录的“System*”。
☑ searchOption:SearchOption枚举的一个值,指定搜索操作是应仅包含当前目录还是应包含所有子目录。
☑ 返回值:第一种重载形式的返回值为DirectoryInfo对象的数组;第二种和第三种重载形式的返回值为与searchPattern匹配的DirectoryInfo类型的数组。
2.GetFiles()方法
GetFiles()方法用来返回当前目录的文件列表。该方法为可重载方法,它有以下3种重载形式。
public Filelnfo[]GetFiles()
public Filelnfo[]GetFiles(string searchPattern)
public Filelnfo[]GetFiles(string searchPattern,SearchOption searchOption)
☑ searchPattern:搜索字符串(如“*.txt”)。
☑ searchOption:SearchOption枚举的一个值,指定搜索操作是应仅包含当前目录还是应包含所有子目录。
☑ 返回值:FileInfo类型数组。
3.GetFileSystemInfos()方法
GetFileSystemInfos()方法用来返回表示某个目录中所有文件和子目录的FileSystemInfo类型数组。该方法为可重载方法,它有以下两种重载形式。
public FileSystemInfo[]GetFileSystemInfos()
public FileSystemInfo[]GetFileSystemInfos(string searchPattern)
☑ searchPattern:搜索字符串。
☑ 返回值:第一种重载形式的返回值为FileSystemInfo项的数组;第二种重载形式的返回值为与搜索条件匹配的FileSystemInfo对象的数组。
4.示例
(1)源码
namespace _06
{public partial class Form1 : Form{private readonly TextBox? textBox1;private readonly Label? label1;private readonly Button? button1;private readonly FolderBrowserDialog? folderBrowserDialog1;private readonly ListView? listView1;private readonly ColumnHeader? columnHeader1;private readonly ColumnHeader? columnHeader2;private readonly ColumnHeader? columnHeader3;private readonly ColumnHeader? columnHeader4;public Form1(){InitializeComponent();//文本框控件textBox1 = new TextBox();{textBox1.Location = new Point(97, 18);textBox1.Name = "textBox1";textBox1.Size = new Size(159, 21);textBox1.Text = "";}//标签控件label1 = new Label();{label1.AutoSize = true;label1.Location = new Point(16, 21);label1.Text = "选择文件夹:";}//按钮控件及事件button1 = new Button();{button1.Location = new Point(268, 16);button1.Name = "button1";button1.Size = new Size(60, 23);button1.Text = "浏览";button1.UseVisualStyleBackColor = true;button1.Click += new EventHandler(Button1_Click);}//文件夹浏览控件folderBrowserDialog1 = new FolderBrowserDialog();{}//列标题控件columnHeader1 = new ColumnHeader();{columnHeader1.Text = "文件名";columnHeader1.Width = 200;}columnHeader2 = new ColumnHeader();{columnHeader2.Text = "路径";columnHeader2.Width =500;}columnHeader3 = new ColumnHeader();{columnHeader3.Text = "大小";columnHeader3.Width = 40;}columnHeader4 = new ColumnHeader();{columnHeader4.Text = "创建日期";columnHeader4.Width = 60;}// listView1控件及设置listView1 = new ListView();{listView1.Columns.AddRange([columnHeader1,columnHeader2,columnHeader3,columnHeader4]);listView1.HideSelection = false;listView1.Location = new Point(12, 45);listView1.Name = "listView1";listView1.Size = new Size(800, 100);listView1.TabIndex = 3;listView1.UseCompatibleStateImageBehavior = false;listView1.View = View.Details;}//Form1,要放在最末尾,否则空白ClientSize = new Size(820, 160);Name = "Form1";Text = "Form1";Controls.Add(textBox1);Controls.Add(label1);Controls.Add(button1);Controls.Add(listView1);PerformLayout();}private void Button1_Click(object? sender, EventArgs e){listView1?.Items.Clear();if (folderBrowserDialog1?.ShowDialog() == DialogResult.OK){textBox1!.Text = folderBrowserDialog1.SelectedPath; DirectoryInfo dinfo = new(textBox1.Text); //实例化DirectoryInfo对象 FileSystemInfo[] fsinfos = dinfo.GetFileSystemInfos(); //获取指定目录下的所有子目录及文件类型foreach (FileSystemInfo fsinfo in fsinfos){if (fsinfo is DirectoryInfo) //判断是否文件夹{ DirectoryInfo directoryInfo = new(fsinfo.FullName); //使用获取的文件夹名称实例化DirectoryInfo对象DirectoryInfo dirinfo = directoryInfo; listView1?.Items.Add(dirinfo.Name); //为ListView控件添加文件夹信息listView1?.Items[listView1.Items.Count - 1].SubItems.Add(dirinfo.FullName);listView1?.Items[listView1.Items.Count - 1].SubItems.Add("");listView1?.Items[listView1.Items.Count - 1].SubItems.Add(dirinfo.CreationTime.ToShortDateString());}else{ FileInfo finfo = new(fsinfo.FullName); //使用获取的文件名称实例化FileInfo对象 listView1?.Items.Add(finfo.Name); //为ListView控件添加文件信息listView1?.Items[listView1.Items.Count - 1].SubItems.Add(finfo.FullName);listView1?.Items[listView1.Items.Count - 1].SubItems.Add(finfo.Length.ToString());listView1?.Items[listView1.Items.Count - 1].SubItems.Add(finfo.CreationTime.ToShortDateString());}}}}}
}
采用不设计Form1.cs[设计]的设计方法。
(2)生成效果
浏览并选择一个文件夹,确定后就遍历文件夹
相关文章:

C#文件夹基本操作(判断文件夹是否存在、创建文件夹、移动文件夹、删除文件夹以及遍历文件夹中的文件)
目录 一、判断文件夹是否存在 1.Directory类的Exists()方法 2. DirectoryInfo类的Exists属性 二、创建文件夹 1. Directory类的CreateDirectory()方法 2.DirectoryInfo类的Create()方法 三、移动文件夹 1. Directory类的Move()方法 2.DirectoryInfo类的MoveT…...

python 交互模式和命令行模式的问题
python 模式的冲突 unexpected character after line continuation character 理论上 ide里,输入 python 文件路径\文件.py 就可以执行 但是有时候却报错 unexpected character after line continuation character 出现上述错误的原因是没有退出解释器&#x…...

计算机网络——数据链路层
目录 一、数据链路层的基本概念 (一)数据链路层的概念 (二)帧 (三)数据链路层分为哪两个部分 (1)LLC(逻辑控制访问) (2)MAC&…...
【限时免费】20天拿下华为OD笔试之【哈希集合】2023B-明明的随机数【欧弟算法】全网注释最详细分类最全的华为OD真题题解
文章目录 题目描述与示例题目描述输入描述输出描述:示例 1输入输出说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 明明生成了N 个 1 至 500 之间的随机整数。请你删去其中重复的数字,即…...
播放器开发(五):视频帧处理并用SDL渲染播放
目录 学习课题:逐步构建开发播放器【QT5 FFmpeg6 SDL2】 步骤 VideoOutPut模块 1、初始化【分配缓存、读取信息】 2、开始线程工作【从队列读帧->缩放->发送渲染信号到窗口】 VideoWidget自定义Widget类 1、定义内部变量 2、如果使用SDL,需要进…...

Spring MVC数据绑定的几种方法(一)
这篇文章包含spring mvc的默认数据类型绑定和简单数据类型绑定。内容来自实验。 准备: (1)在IDEA环境中从archetye创建webapp类型的maven项目exp6。 (2)在src\main目录下创建并标注java源代码文件夹和resources资源文…...
CSP-坐标变换(其二)
问题描述 对于平面直角坐标系上的坐标 (x,y),小 P 定义了如下两种操作: 拉伸 k 倍:横坐标 x 变为 kx,纵坐标 y 变为 ky; 旋转 θ:将坐标 (x,y) 绕坐标原点 (0,0) 逆时针旋转 θ 弧度(0≤θ<…...

docker 安装jekins
echo Asia/Shanghai >/etc/timezone,容器中操作报错:docker容器中 Permission denied 使用该-u选项时,可以使用root用户(ID 0),而不是用默认用户登录docker容器 docker exec -u 0 -it f8a2b3d91455 /bin/bash 或者ÿ…...

ChatGPT 问世一周年之际,开源大模型能否迎头赶上?
就在11月30日,ChatGPT 迎来了它的问世一周年,这个来自 OpenAI 的强大AI在过去一年里取得了巨大的发展,迅速吸引各个领域的用户群体。 我们首先回忆一下 OpenAI和ChatGPT这一年的大事记(表格由ChatGPT辅助生成)&#x…...

数据结构和算法-哈夫曼树以相关代码实现
文章目录 总览带权路径长度哈夫曼树的定义哈夫曼树的构造法1法2 哈夫曼编码英文字母频次总结实验内容: 哈夫曼树一、上机实验的问题和要求(需求分析):二、程序设计的基本思想,原理和算法描述:三、调试和运行…...

Kafka 的起源和背景
Apache Kafka 是一个分布式流处理平台,被广泛用于构建实时数据流应用程序和大数据处理系统。本文将深入探讨 Kafka 的起源、设计原则以及它在大数据领域中的重要作用。 大数据和实时数据处理背景 在大数据时代,处理海量数据和实时数据成为了一项关键挑…...

三极管在数字电路中的应用
一、认识三极管 三极管拥有3个引脚,分别对应3个级:基极(Base)、发射极(Emitter)、集电极(Collector),如下图所示;下图横向左侧的是基极,带箭头的那个引脚就是发射极,另一个就是集电…...

java后端自学错误总结
java后端自学错误总结 MessageSource国际化接口总结 MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口,提供了国际化信息的能力。MessageSource用于解析 消息,并支持消息的参数化…...

CLion安装与配置教程
目录 一、下载并安装CLion1、下载1、官网:2、注意: 2、安装1、下载完成后,直接点击安装包安装,即可。2、开始安装,然后下一步3、可以在此处自定义地址,然后下一步4、根据系统版本选择,然后下一步…...
初识主力投资者
在股票市场中,真正赚钱的散户并不多。“七亏二平一赚”似乎已经成为了大家公认的一个股市定律。 为什么散户炒股赚的人少呢?原因很简单,就是因为市场上除了散户之外,还存在着一个重要的投资主体——主力。股市交易的过程ÿ…...

vue项目报错及解决npm run build:prod打包错误
vue项目报错及解决npm run build:prod打包错误 执行dev环境时加载失败了该变量,在package.json文件中 删掉 解决方法: 打包成功:...

Go连接mysql数据库
package main import ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" ) //go连接数据库示例 func main() {// 数据库信息dsn : "root:roottcp(192.168.169.11:3306)/sql_test"//连接数据库 数据库类型mysql,以及数据库信息d…...

⭐ Unity 里让 Shader 动画在 Scene 面板被持续刷新
写 Unity Shader的时候,只有播放状态下的 Game 面板能看到Shader 顺畅的动态效果,不方便。 想要带有动态效果的 Shader 在 Scene 面板持续更新动画,只需要打开一个开关就能让 Scene 持续刷新动画了。 感谢大家的观看,您的点赞和关…...

面试--各种场景问题总结
1.在开发过程中,你是如何保证机票系统的正常运行的? 用户、测试、监控和日志、安全措施、数据备份、系统设计、需求分析 2.在机票系统开发过程中,你最有成就的事情,为什么? 用户体验感、高可用和稳定性、客户满意度、系…...

solidity实现ERC721代币标准发布NFT
文章目录 1、非同质化货币(NFT)- 维基百科2、IERC1653、IERC7214、IERC721Receiver5、IERC721Metadata6、ERC7217、ERC721 NFT 的实现8、编译部署 1、非同质化货币(NFT)- 维基百科 非同质化代币(英语:Non-F…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...