文件和目录操作
掌握静态工具类与实例类两套文件操作体系
熟练进行目录创建、遍历、批量文件处理
掌握路径工具类与文件属性操作
能实现递归目录遍历、批量重命名等业务场景
核心讲解
.NET 提供了两套文件操作 API:静态工具类(全局调用、简单方便)和实例类(面向对象、适合连续操作),配合路径工具类实现完整的文件系统操作。
(1)核心类与命名空间
命名空间:
System.IO静态工具类:
File、Directory,所有方法都是静态,适合单次操作实例类:
FileInfo、DirectoryInfo,一个对象对应一个文件 / 目录,适合多次操作、属性访问路径工具:
Path,专门处理路径字符串,跨平台兼容
(2)目录核心操作
表格
操作 | Directory 静态 | DirectoryInfo 实例 |
|---|---|---|
创建 |
|
|
是否存在 |
|
|
删除 |
|
|
获取子文件 |
|
|
获取子目录 |
|
|
移动 |
|
|
(3)文件核心操作
创建、删除、复制、移动、存在判断
读取:全量读、按行读、流式读
写入:覆盖写、追加写、流式写
(4)Path 工具类
常用方法:Combine() 拼接路径、GetExtension() 获取扩展名、GetFileName() 获取文件名、GetDirectoryName() 获取目录路径。 自动处理不同系统的路径分隔符,避免手动拼接路径的兼容问题。
操作步骤
新建控制台项目,引入
System.IO命名空间编写目录创建、遍历、批量处理代码
运行程序,在资源管理器中验证结果
代码示例
using System.IO;
string basePath = Path.Combine(Environment.CurrentDirectory, "FileDemo");
Console.WriteLine("操作目录:" + basePath);
// ===== 1. 目录操作 =====
// 创建多级目录
Directory.CreateDirectory(Path.Combine(basePath, "docs", "images"));
Console.WriteLine("目录创建完成");
// 检查存在
Console.WriteLine("目录是否存在:" + Directory.Exists(basePath));
// 创建测试文件
for (int i = 1; i <= 5; i++)
{
string filePath = Path.Combine(basePath, $"file_{i}.txt");
File.WriteAllText(filePath, $"第{i}个测试文件内容");
}
// ===== 2. 遍历目录 =====
Console.WriteLine("\n遍历所有文件:");
string[] files = Directory.GetFiles(basePath, "*.txt", SearchOption.AllDirectories);
foreach (string file in files)
{
FileInfo fi = new FileInfo(file);
Console.WriteLine($"{fi.Name}\t{fi.Length}字节\t{fi.CreationTime:yyyy-MM-dd}");
}
// ===== 3. 批量重命名 =====
Console.WriteLine("\n批量重命名...");
DirectoryInfo dir = new DirectoryInfo(basePath);
foreach (FileInfo file in dir.GetFiles("*.txt"))
{
string newName = "data_" + file.Name;
string newPath = Path.Combine(file.DirectoryName!, newName);
file.MoveTo(newPath);
}
// 重新遍历验证
Console.WriteLine("\n重命名后:");
foreach (string file in Directory.GetFiles(basePath))
{
Console.WriteLine(Path.GetFileName(file));
}
// ===== 4. 文件属性 =====
FileInfo testFile = new FileInfo(Path.Combine(basePath, "data_file_1.txt"));
Console.WriteLine($"\n文件属性:");
Console.WriteLine($"完整路径:{testFile.FullName}");
Console.WriteLine($"扩展名:{testFile.Extension}");
Console.WriteLine($"只读:{testFile.IsReadOnly}");
Console.WriteLine($"最后修改:{testFile.LastWriteTime}");
Console.ReadKey();
常见误区
路径手动拼接:用字符串
+ "\\"拼接路径,Linux/macOS 不兼容,必须用Path.Combine()删除非空目录报错:
Directory.Delete()默认只能删空目录,加第二个参数true才会递归删除相对路径基准错:相对路径相对于程序运行目录,不是代码文件目录
文件被占用还操作:文件被其他进程占用时,读写删都会抛异常,要先释放
课后练习
在 D 盘创建
project/docs两级目录遍历指定目录,找出所有
.txt文件,统计总大小实现:批量将目录下的
.txt文件重命名为.md对比静态类和实例类的优缺点,分别说明适用场景

