C#对目录和文件的处理
在 C# 中,处理目录和文件主要依赖 System.IO 命名空间下的类,这些类提供了跨平台的文件系统操作能力。以下是核心功能的总结及示例:
一、核心类与功能分类
| 类别 | 核心类/方法 | 主要功能 |
|---|---|---|
| 目录操作 | Directory、DirectoryInfo |
创建、删除、移动目录,获取目录列表等 |
| 文件操作 | File、FileInfo |
创建、删除、复制、移动文件,读写文件内容 |
| 路径处理 | Path 静态类 |
路径拼接、获取文件名/扩展名、父目录等 |
二、常用操作示例
1. 路径处理(Path 类)
用于路径字符串的解析和拼接(跨平台自动适配分隔符):
using System.IO;
// 拼接路径(避免手动写 "\" 或 "/")
string dirPath = Path.Combine(Application.persistentDataPath, "saveData");
string filePath = Path.Combine(dirPath, "userInfo.txt");
// 获取文件名(含扩展名)
string fileName = Path.GetFileName(filePath); // 结果:userInfo.txt
// 获取文件扩展名
string ext = Path.GetExtension(filePath); // 结果:.txt
// 获取父目录路径
string parentDir = Path.GetDirectoryName(dirPath); // 结果:Application.persistentDataPath
2. 目录操作
(1)Directory 静态类(适合简单操作)
// 检查目录是否存在
if (Directory.Exists(dirPath))
{
// 删除目录(递归删除子目录和文件)
Directory.Delete(dirPath, recursive: true);
}
// 创建目录(自动创建不存在的父目录)
Directory.CreateDirectory(dirPath);
// 获取目录下的所有子目录
string[] subDirs = Directory.GetDirectories(dirPath);
// 获取目录下的所有文件(可加筛选条件)
string[] files = Directory.GetFiles(dirPath, "*.txt"); // 只获取txt文件
(2)DirectoryInfo 类(适合多次操作同一目录)
// 初始化目录对象
DirectoryInfo dirInfo = new DirectoryInfo(dirPath);
// 创建目录
if (!dirInfo.Exists)
{
dirInfo.Create();
}
// 获取最后修改时间
DateTime lastWriteTime = dirInfo.LastWriteTime;
// 移动目录(剪切到新位置)
dirInfo.MoveTo(Path.Combine(Application.persistentDataPath, "oldData"));
3. 文件操作
(1)File 静态类(适合简单读写)
// 写入文本文件(覆盖模式)
string content = "用户名:test\n分数:100";
File.WriteAllText(filePath, content, System.Text.Encoding.UTF8);
// 追加文本到文件
File.AppendAllText(filePath, "\n等级:A");
// 读取文件内容
string readContent = File.ReadAllText(filePath);
// 复制文件(第三个参数:是否覆盖已存在文件)
string copyPath = Path.Combine(dirPath, "userInfo_backup.txt");
File.Copy(filePath, copyPath, overwrite: true);
// 删除文件
if (File.Exists(copyPath))
{
File.Delete(copyPath);
}
(2)FileInfo 类(适合大文件或多次操作)
// 初始化文件对象
FileInfo fileInfo = new FileInfo(filePath);
// 检查文件是否存在
if (fileInfo.Exists)
{
// 获取文件大小(字节)
long fileSize = fileInfo.Length;
// 移动文件(剪切到新位置)
fileInfo.MoveTo(Path.Combine(dirPath, "userInfo_new.txt"));
}
// 流式写入(适合大文件,避免一次性加载到内存)
using (FileStream fs = fileInfo.OpenWrite())
{
byte[] data = System.Text.Encoding.UTF8.GetBytes("大文件内容...");
fs.Write(data, 0, data.Length);
}
三、关键注意事项
-
异常处理:文件操作可能抛出异常(如权限不足、文件被占用),建议用
try-catch包裹:try { File.WriteAllText(filePath, "内容"); } catch (IOException ex) { Debug.LogError("文件写入失败:" + ex.Message); } -
using语句:操作FileStream等非托管资源时,用using自动释放资源,避免内存泄漏。 -
跨平台兼容:
- 路径分隔符用
Path.DirectorySeparatorChar(自动适配 Windows 的\和 Linux/macOS 的/)。 - 避免硬编码绝对路径(如
C:\),优先使用相对路径或系统特殊目录(如Application.persistentDataPath)。
- 路径分隔符用
通过上述类和方法,可实现对目录和文件的完整管理,从简单的创建删除到复杂的流式读写均能覆盖。