
.NET I/O 学习笔记:目录和文件
获取目录名称列表:
发布日期:2021-05-28 16:26:42
浏览次数:35
分类:精选文章
本文共 4700 字,大约阅读时间需要 15 分钟。
在.NET Framework中操作文件和目录
一、复制目录及其子目录的文件
在C#中,你可以编写一个递归的方法来复制指定目录及其子目录中的所有文件到目标目录。以下是一个实现示例:
////// 复制目录文件(可包括其子目录)/// /// 源目录/// 复制目录/// 是否复制子目录public static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs){ // 创建 DirectoryInfo 对象 DirectoryInfo dir = new DirectoryInfo(sourceDirName); // 检查源目录是否存在 if (!dir.Exists) { throw new DirectoryNotFoundException("源目录不存在或者无法找到: " + sourceDirName); } // 创建目标目录,如果不存在则创建 if (!Directory.Exists(destDirName)) { Directory.CreateDirectory(destDirName); } // 获取源目录中的文件 FileInfo[] files = dir.GetFiles(); foreach (FileInfo file in files) { string tempPath = Path.Combine(destDirName, file.Name); if (!File.Exists(tempPath)) { file.CopyTo(tempPath, false); // 如果使用true,可以覆盖原文件 } else { Console.WriteLine("文件{0}已存在于目标目录{1}", file.Name, destDirName); } } // 复制子目录(如果需要) if (copySubDirs) { // 获取源目录的子目录 DirectoryInfo[] dirs = dir.GetDirectories(); foreach (DirectoryInfo subDir in dirs) { string subDirName = subDir.Name; string subDirPath = subDir.FullName; string tempPath = Path.Combine(destDirName, subDirName); // 递归复制子目录中的文件 DirectoryCopy(subDirPath, tempPath, copySubDirs); } }}
二、获取特定模式文件列表
以下方法可以帮助你获取特定文件模式下的文件列表,包括子目录中的文件:
////// 获取目录文件匹配列表/// /// 源目录名称/// 匹配模式/// 是否查找子目录public static void GetDirectoryFileList(string sourceDirName, string searchPattern, bool searchSubDirs){ DirectoryInfo dir = new DirectoryInfo(sourceDirName); // 获取源目录子目录 DirectoryInfo[] dirs = dir.GetDirectories(); // 获取文件数组 FileInfo[] files = dir.GetFiles(searchPattern); foreach (FileInfo file in files) { Console.WriteLine("文件大小: {0,-12:N0} 创建时间: {1:g} {2}", file.Length, file.CreationTimeUtc, file.Name); } // 如果需要搜索子目录 if (searchSubDirs) { foreach (DirectoryInfo subDir in dirs) { GetDirectoryFileList(subDir.FullName, searchPattern, searchSubDirs); } }}
三、利用枚举方法操作目录和文件
从.NET Framework 4.0开始,枚举方法(例如Directory.EnumerateDirectories和Directory.EnumerateFiles)被引入,提供了更直观和高效的接口。以下是一些示例:
public static void GetEnumDirectory(string dirPath){ if (!Directory.Exists(dirPath)) { throw new DirectoryNotFoundException("路径不存在: " + dirPath); } var dirs = Directory.EnumerateDirectories(dirPath) .Select(d => d.Name) .ToList(); Console.WriteLine("总共有{0}个子目录", dirs.Count); foreach (var dir in dirs) { Console.WriteLine(dir); }}
- 获取目录信息:
- 获取文件名称列表:
- 获取文件信息:
public static void GetEnumDirectoryInfoList(string path){ try { using (DirectoryInfo dir = new DirectoryInfo(path)) { var dirList = dir.EnumerateDirectories("P*", SearchOption.TopDirectoryOnly); foreach (DirectoryInfo dirInfo in dirList) { string dirName = dirInfo.FullName.Substring(dirInfo.FullName.LastIndexOf("\\") + 1); Console.WriteLine("目录名称: {0} 创建时间: {1}", dirName, dirInfo.CreationTimeUtc); } } } catch (UnauthorizedAccessException ex) { Console.WriteLine(ex.Message); }}
public static void GetEnumFiles(string path){ try { var files = Directory.EnumerateFiles(path, "*.exe", SearchOption.AllDirectories); foreach (var file in files) { // 你可以根据需要处理每个文件 Console.WriteLine(file); // 或自定义输出格式 string fileName = file.Substring(file.LastIndexOf("\\") + 1); Console.WriteLine("文件名: {0}", fileName); } } catch (UnauthorizedAccessException ex) { Console.WriteLine(ex.Message); }}
public static void GetEnumFileInfo(string path){ try { using (DirectoryInfo dir = new DirectoryInfo(path)) { var files = dir.EnumerateFiles("*.exe", SearchOption.AllDirectories); foreach (FileInfo file in files) { Console.WriteLine("文件名称: {0} 文件大小: {1}MB 创建时间: {2}", file.Name, (file.Length / 1024.0).ToString("N2"), file.CreationTimeUtc); } } } catch (UnauthorizedAccessException ex) { Console.WriteLine(ex.Message); }}
这些方法提供了一个更直观和高效的方式来处理文件和目录操作,确保了代码简洁性和可读性。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月14日 22时57分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
21-JS中常见的函数
2019-03-14
19-认识bootstrap
2019-03-14
为什么要使用UTF-8?
2019-03-14
Android多线程与双缓冲
2019-03-14
MVVM_Template
2019-03-14
{spring.cloud.client.ipAddress}
2019-03-14
栈上内存溢出漏洞利用之Return Address
2019-03-14
Bugku CTF web29(Web)
2019-03-14
网络+图片加载框架(英文版)
2019-03-14
扣非净利润连续三年亏损,四维图新如何熬过“转型阵痛期”?
2019-03-14
前台报Invalid Host/Origin Header错误
2019-03-14
IE浏览器中input的placeholder不显示
2019-03-14
【CSP - S T1】格雷码
2019-03-14
Python imageio方法示例
2019-03-14
Possible missing firmware
2019-03-14
算法的学习方式
2019-03-14
JAVA BigInteger和BigDecimal类常用方式
2019-03-14
深度学习框架 各种模型下载集合 -- models list
2019-03-14
双层卷积神经网络--tf
2019-03-14