c# 找出目录下的所有子目录_C# 基础知识系列- 14 IO篇 文件的操作(2)

前接上一篇内容。

如果是第一次捧场的小伙伴,为了您阅读的连贯性,烦请扫一眼《C# 基础知识系列- 14 IO篇 文件的操作(1)》。本篇是IO之文件操作的第二篇,介绍一下目录和路径的相关类。下一篇介绍如何通过流来操作文件。

849753c9999fe6bcc87e436d6a79045d.png

1.2 Directory和DirectoryInfo

1.2.1 Directory

d. 返回目录下的所有子目录:

public static string[] GetDirectories (string path);public static string[] GetDirectories (string path, string searchPattern);public static string[] GetDirectories (string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);public static string[] GetDirectories (string path, string searchPattern, System.IO.SearchOption searchOption);

除了上文提到的 GetDirectories 方法可以直接返回目录下所有子目录以外,还有一组方法也可以枚举出当前目录下的子目录:

public static System.Collections.Generic.IEnumerable EnumerateDirectories (string path);

枚举 path 目录下的所有子目录。

public static System.Collections.Generic.IEnumerable EnumerateDirectories (string path, string searchPattern);

searchPattern,搜索名称字符串,可以包含有效文本路径和通配符(* 和 ?)的组合,但不支持正则表达式。

public static System.Collections.Generic.IEnumerable EnumerateDirectories (string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);public static System.Collections.Generic.IEnumerable EnumerateDirectories (string path, string searchPattern, System.IO.SearchOption searchOption);

这两个方法放在一起讲,这两个是对上一个方法的增强和补充。其中 EnumerationOptions 是类,可以配置查询的条件;SearchOption 是个枚举,选择只查询当前目录的子目录名称还是继续深入查询子孙目录。

aa1d31292f46ee7727f4333d5b012a6f.png

e.查看目录下的所有文件-补充

与子目录查询相同,Directory也支持这么几组查询方法:

public static string[] GetFiles (string path);public static string[] GetFiles (string path, string searchPattern);public static string[] GetFiles (string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);public static string[] GetFiles (string path, string searchPattern, System.IO.SearchOption searchOption);

从参数上看,可以看出来这是返回子目录下的文件列表。其中使用 searchPattern查询名称,enumerationOptions 作为查询条件,searchOption 作为查询的深度。

同样,查询文件也可以使用枚举方法:

public static System.Collections.Generic.IEnumerable EnumerateFiles (string path);public static System.Collections.Generic.IEnumerable EnumerateFiles (string path, string searchPattern);public static System.Collections.Generic.IEnumerable EnumerateFiles (string path, string searchPattern, System.IO.EnumerationOptions enumerationOptions);public static System.Collections.Generic.IEnumerable EnumerateFiles (string path, string searchPattern, System.IO.SearchOption searchOption);

f.获取当前目录

public static string GetCurrentDirectory ();

在程序中调用这个方法可以获取程序执行时的目录,如果是在调试阶段,目录是指程序的主方法所在目录;如果在发布之后,也就是运行阶段,该目录指程序所在目录。

g.获取上级目录

public static System.IO.DirectoryInfo GetParent (string path);

获取传入目录的上级目录信息。

6ddfb359ef0ca31fe922d62a07cf77aa.png

h.目录移动

public static void Move (string sourceDirName, string destDirName);

sourceDirName 移动到 destDirName,其中destDirName所代表的目录不能存在。这个方法有个很有意思的特点,它也支持移动文件。也就是说,如果sourceDirNanme指向的是一个文件,那么destDirName也必须是一个文件类型的路径字符串。

i.删除目录

public static void Delete (string path);//删除 path所代表的目录,如果目录非空则提示无法删除public static void Delete (string path, bool recursive);// recursive指示是否同时删除子目录和文件

以上是Directory类的一些常用方法,当然还有更多的内容留待小伙伴一起发掘。传送门==>https://docs.microsoft.com/zh-cn/dotnet/api/system.io.directory?view=netcore-3.1

926d1c59a71a43d10470887d10ac91f7.png

1.2.2 DirectoryInfo

之前的篇幅我们介绍了Directory的工具类所支持的方法,接下来我们看一下 DirectoryInfo有哪些属性和方法吧。

public DirectoryInfo (string path);

初始化的方式很简单,直接传递一个目录的路径字符串,就可以获取一个目录信息类了。

接下来看看,DirectoryInfo支持的属性:

public override bool Exists { get; }// 目录是否存在public override string Name { get; }// 目录名称,不是路径public System.IO.DirectoryInfo Parent { get; }//如果有上级目录,则返回上级目录,如果没有则返回 nullpublic System.IO.DirectoryInfo Root { get; }//获取目录的根目录

我们路过了DirectoryInfo的属性,看到了它一部分特点,那么我们该怎么使用呢?

public void Create ();

创建目录信息所代表的目录,如果目录已存在,则不会有任何变化 。如果这个目录的父目录也不存在,则自动创建父目录

public System.IO.DirectoryInfo CreateSubdirectory (string path);

创建 pathi指定的子目录。

public override void Delete ();

如果当前目录是空目录,调用可直接删除,如果非空则会提示错误。

public void Delete (bool recursive);

根据参数 recursive指定是否删除当前目录的子目录。

public System.IO.DirectoryInfo[] GetDirectories ();public System.IO.DirectoryInfo[] GetDirectories (string searchPattern);public System.IO.DirectoryInfo[] GetDirectories (string searchPattern, System.IO.EnumerationOptions enumerationOptions);public System.IO.DirectoryInfo[] GetDirectories (string searchPattern, System.IO.SearchOption searchOption);

获取子目录的数组,参数与 Directory 的同名方法一致。

public System.Collections.Generic.IEnumerable EnumerateDirectories ();public System.Collections.Generic.IEnumerable EnumerateDirectories (string searchPattern);public System.Collections.Generic.IEnumerable EnumerateDirectories (string searchPattern, System.IO.EnumerationOptions enumerationOptions);public System.Collections.Generic.IEnumerable EnumerateDirectories (string searchPattern, System.IO.SearchOption searchOption);

返回一个子目录信息的可枚举集合。

public System.IO.FileInfo[] GetFiles ();public System.IO.FileInfo[] GetFiles (string searchPattern);public System.IO.FileInfo[] GetFiles (string searchPattern, System.IO.EnumerationOptions enumerationOptions);public System.IO.FileInfo[] GetFiles (string searchPattern, System.IO.SearchOption searchOption);

嗯,依旧类似的写法,获取文件信息的数组

public System.Collections.Generic.IEnumerable EnumerateFiles ();public System.Collections.Generic.IEnumerable EnumerateFiles (string searchPattern);public System.Collections.Generic.IEnumerable EnumerateFiles (string searchPattern, System.IO.EnumerationOptions enumerationOptions);public System.Collections.Generic.IEnumerable EnumerateFiles (string searchPattern, System.IO.SearchOption searchOption);

返回文件的可枚举集合。

public void MoveTo (string destDirName);

把当前目录移动到对应的目录。

依旧未完待续,下一篇将为大家介绍一下 Path类和FileInfo与DirectoryInfo的父类 FileSystemInfo 这两个类的API,然后演示一下如何使用流来读写文件。在文件和目录这块内容里,我故意忽略了权限的介绍,这部分我将会放在进阶篇中介绍。

API的介绍总是这么枯燥乏味,不过请期待一下,在IO篇完成后,我会演示一下如何做一个简单的文件查找工具。

简单介绍一下这个工具的内容:它会遍历系统里所有文件的路径信息,然后记录到一个缓存文件中,用户输入一个要查询的文件名时,我们可以通过读取缓存文件确认文件所在目录。

749e829a4d171167278dd3f4ce4f8e30.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么配置在谷歌和ie内核时使用不同的_重磅!微软竟然研发了谷歌内核的edge

走过路过不要错过点击蓝字关注我们很I高I兴I你I能I来小水GOOD NIGHT 希I望I你I别I离I开软件目录第三十九期▼物致于此小得盈满序言上周小编们期末考试已经结束了,从这周开始,推文将会开始有所更新,希望喜爱我们公众号的你们都还在。但由于小编…

Java 8过滤器,地图,收集和流示例

大家好,许多读者给我发了电子邮件,写了一篇有关Java 8的地图和过滤器功能的文章,因为他们发现它们难以理解和使用。 即使我以前同时写过有关map()和filter()的博客,我仍在写这篇文章…

使用mysql命令行的工具_[MySQL]命令行工具和基本操作

一 MySQL命令行工具 (查看帮助 ---help,或 -?)1)MySQLMySQL是一个简单的SQL外壳(有GNUreadline功能)。它支持交互式和非交互式使用。当交互使用时,查询结果采用ASCII表格式。当采用非交互式(例如,用作过滤器)模式时,结…

matlab simulink_MATLAB之Simulink(二)利用switch模块将正弦信号变为方波信号

##MATLAB之Simulink(二)##利用switch模块将正弦信号变为方波信号今天给大家展示一个simulink电路仿真,将正弦信号转化为方波信号。下面开始教程:1.首先直接在MATLAB命令行中输入simulink或者直接点击图标运行。2.新建一个空白编辑界面。3.打开模型库&…

web.xml.jsf_使用JSF 2.2功能来开发可滚动,可延迟加载的Ajax数据表

web.xml.jsf这次,我想与您分享我最近从JSF 2.2功能中学到的知识。 为此,我决定创建一个简单的ajax,可滚动,延迟加载的数据表。 请注意, 绝不这是相当大的库如Primefaces , RichFaces的或ICEFaces的 。 这只…

mysql 并发 锁表_MySQL中的锁(表锁、行锁) 并发控制锁

https://github.com/MrLining/mysql/wiki/MySQL%E4%B8%AD%E7%9A%84%E9%94%81%EF%BC%88%E8%A1%A8%E9%94%81%E3%80%81%E8%A1%8C%E9%94%81%EF%BC%89-%E5%B9%B6%E5%8F%91%E6%8E%A7%E5%88%B6%E9%94%816、 表锁差异MyISAM:只支持表级锁,用户在操作myisam表时&a…

jwt获取token_Koa开发之koa-jwt工作过程

最近的工作是开发一个分布式的服务系统,选用的环境是node开发环境,由于需要全面的进行异步开发所以使用Koa框架,开发Web服务需要对用户进行身份认证,所以就使用koa-jwt,为什么使用token这种方式网上有很多介绍token和s…

c语言大作业_2018 C语言大作业--21_Ekko制作教程

同学们实现的效果:https://www.zhihu.com/video/1066249425780809728以下是开发同学的相关文档:《Ekko》设计报告本组设计并编写的游戏《Ekko》,是一款引用了当下红火的网络游戏《英雄联盟》中的游戏角色Ekko为主角,由本组三名成员…

Nutshell中的Java 8语言功能-第1部分

你好朋友, Java 8发布已经很长时间了,现在越来越多地被使用。 在本文中,我们将讨论以下Java 8主题。 1.功能接口 2,Lambda表达式 3.默认方法 1.功能界面 什么是功能接口? 与一种并且只有一种抽象方法的接口是功能…

做ppt用的小插图_如何用PPT做随机抽奖?

每到年底,每个公司都开始筹备年会活动。年会在员工们最期待的就是抽奖环节了。除了用专门的抽奖软件之外,PPT也可以做随机抽奖。今天就来解锁这个动画的做法。1,先设置好图片和文本;2,选中每一张幻灯片,选择…

mysql 隔离级别 快照_MySql的四种事务隔离级别

一、事务的四大特性(ACID)了解事务隔离级别之前不得不了解的事务的四大特性。1、原子性(Atomicity)事务开始后所有操作,要么全部做完,要么全部不做。事务是一个不可分割的整体。事务在执行过程中出错,会回滚到事务开始之前的状态,…

jsp mysql论坛_使用SSM和ajax做一个简易的论坛-01(简介和建表)

三月底刚学完SSM试着做了个简单的论坛,想分享一下,顺便整理一下自己的收获。一、demo介绍一个具有登录、注册功能,发帖、回帖功能的简易论坛。没有后台系统。设计逻辑类似于贴吧,发帖时自动附带一个一楼。二、使用的框架/库前端&a…

elastic 修改map_Amazon Elastic Map Reduce使用Apache Mahout计算建议

elastic 修改mapApache Mahout是一个“可扩展的机器学习库”,其中包括各种单节点和分布式推荐算法的实现。 在上一篇博客文章中, 我描述了如何在单个节点上实现在线推荐系统来处理数据。 如果数据太大而无法放入内存(> 100M首选项数据点&a…

mysql 更新时间加数字_Mysql实战45讲笔记:8、聚合函数count

count(*)的实现方式在不同的MySQL引擎中,count()有不同的实现方式 1. MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count()的时候会直接返回这个数,效率很高; 2. 而InnoDB引擎就麻烦了,它执行count(*)的时候&…

python学生管理系统类图_类图 python

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我正在研究一个庞大的遗留python类,它有很多方法。 我最终将复杂的方法分解成更小的部分&#x…

简单的测试可以防止最严重的故障

错误处理是软件开发中最困难且被忽略的部分之一,如果系统是分布式的,那么这将变得更加困难。 好的论文写在“ 简单测试可以预防最关键的故障” 主题上。 每个开发人员都应该阅读本文。 我将尝试总结本文的主要内容,但建议阅读该论文以获取有…

sql 两个 in_SQL基础知识——IN运算符

IN的作用IN运算符允许您在WHERE子句中指定多个值。IN运算符是多个OR条件的简写。IN的语法SELECT column_name(s) FROM table_name WHERE column_name IN (value1, value2, ...);或者SELECT column_name(s) FROM table_name WHERE column_name IN (SELECT STATEMENT);示例数据库…

pythonlist循环添加元素_python中 for循环之后 添加元素到列表失败?

import re ls list() dc dict() # 介词、连词、人称代词等自己统计 adverb [i, you, he, she, it, in, on, with, by, for, at, about, under, of, to, and, or, therefore, so, of, a] with open("老人与海.txt", moder, encodingutf-8) as f: lryh f.read() # …

开始协议处理句柄_基于smb协议的wmiexec浅析

前言之前研究过Crackmapexec这款工具,对这个工具基于smb协议的wmiexec执行方法产生的流量进行了分析,网上似乎还没有相关的文章,这里旨在抛砖引玉,简单梳理下整个过程,以初学者的视角,探索流量当中存在的奥…

apache camel_轻量级的开源集成:Apache Camel还是Spring集成?

apache camel首先,为全面披露信息,在过去的1.5年中, 我一直担任 FuseSource(现为Red Hat) 的顾问,为零售,运输,银行/金融等不同行业的大型和小型公司提供SOA和集成项目支持。我的专长…