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…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
