C# 中文件与目录操作:重命名、属性访问及类型对比
1. 重命名目录
在 C# 中,可以通过调用 VisualBasic 运行时库来实现文件夹的重命名。尽管属于 VB 命名空间,但它在 C# 项目中完全可用。
string oldPath = @"C:\test";
Microsoft.VisualBasic.FileIO.FileSystem.RenameDirectory(oldPath, "newFolderName");
上述代码将 C:\test 目录更名为 newFolderName,即路径变为 C:\newFolderName。
2. 重命名单个文件
同样使用 RenameFile 方法完成文件名称变更,注意新名称需包含扩展名。
string filePath = @"C:\test2\test.txt";
Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(filePath, "updated.txt");
该操作会把原文件 test.txt 改名为 updated.txt,保持在同一目录下。
3. 获取目录信息对象
通过 DirectoryInfo 类可以获取指定路径的目录实例,并访问其元数据。
string dirPath = @"C:\test";
DirectoryInfo dirInfo = new DirectoryInfo(dirPath);
一旦创建了 DirectoryInfo 实例,即可读取或修改其属性,如创建时间、权限等。
4. 获取文件信息对象
使用 FileInfo 类表示一个具体的文件,可用于查询和操作文件特性。
string fileFullPath = @"C:\test2\test.txt";
FileInfo fileInfo = new FileInfo(fileFullPath);
此对象支持获取大小、只读状态、最后修改时间等信息。
5. 遍历子项:文件与子目录
从一个目录中提取其直接子项(不递归深入):
DirectoryInfo rootDir = new DirectoryInfo(@"C:\test");
// 获取所有直接子文件
FileInfo[] files = rootDir.GetFiles();
// 获取所有直接子目录
DirectoryInfo[] subDirs = rootDir.GetDirectories();
// 获取所有文件系统条目(包括文件和目录)
FileSystemInfo[] allItems = rootDir.GetFileSystemInfos();
这些方法仅返回当前层级的内容,不会进入嵌套层级。
6. DirectoryInfo 类详解
DirectoryInfo 是 System.IO 命名空间中的密封类,用于执行高级目录管理任务,例如创建、移动和删除目录。
常用属性
- Exists:判断目录是否存在。
- FullName:返回完整路径字符串。
- Name:获取目录名(不含父路径)。
- Parent:获取上级目录对象。
- CreationTimeUtc:以 UTC 格式获取创建时间。
- LastWriteTime:最后一次写入的时间戳。
核心方法
- Create():创建目录(若不存在)。
- CreateSubdirectory(string):新建子目录。
- Delete(bool recursive):删除目录;传入
true可连同内容一并清除。 - MoveTo(string newPath):移动目录至新位置。
- GetDirectories() 和 GetFiles():分别列出子目录和文件。
- EnumerateDirectories():延迟加载方式遍历子目录,适合大数据集。
7. FileInfo 类功能概述
FileInfo 提供对单个文件的操作接口,适用于需要多次处理同一文件的场景。
关键属性
- Length:文件字节长度。
- IsReadOnly:是否设置为只读。
- DirectoryName:所在目录的完整路径。
- Extension:文件扩展名。
常用方法
- Create():创建一个新的空文件,返回可写的
FileStream。 - CopyTo(string, bool):复制文件到目标路径,第二个参数决定是否覆盖已有文件。
- MoveTo(string):将文件移动并可更名。
- Delete():安全删除文件(无提示)。
- Replace(string, string):用当前文件替换另一个文件,并生成备份。
8. File vs Directory vs FileInfo vs DirectoryInfo 对比分析
| 类别 | 类型特征 | 性能特点 | 适用场景 |
|---|---|---|---|
File, Directory |
静态类,提供一次性操作方法 | 每次调用都进行安全检查,适合单一操作 | 只需执行一次复制、删除等动作时使用 |
FileInfo, DirectoryInfo |
实例类,需先构造对象 | 避免重复的安全验证,适合多次操作 | 连续执行多个操作(如读取+修改+保存)时更高效 |
总结:如果只是简单地删除一个文件,File.Delete(path) 更简洁;但如果要先检查是否存在、再读取长度、然后重命名,使用 FileInfo 实例更为合理。