在 C# 中处理文件系统:从基础到高级技术
文件系统操作是 C# 应用程序开发中的关键任务之一。无论是保存用户数据、读取配置文件还是处理日志,有效与文件和目录交互的能力是每个 .NET 开发者的必备技能。在本文中,我们将分析 System.IO 命名空间的主要类,学习如何创建、读取和修改文件,并探讨错误处理的最佳实践。
1. 文件系统操作的主要类
在 .NET 中,有几个关键类用于处理文件和目录。让我们详细了解一下它们。
File 和 FileInfo 类
File 是一个静态类,提供用于创建、复制、删除和移动文件的方法。FileInfo 是一个实例类,允许处理特定文件。
using System.IO;
// 使用静态类 File
string path = @"C:\Temp\test.txt";
if (File.Exists(path))
{
string content = File.ReadAllText(path);
Console.WriteLine(content);
}
// 使用 FileInfo
FileInfo fileInfo = new FileInfo(path);
if (fileInfo.Exists)
{
Console.WriteLine($"文件大小: {fileInfo.Length} 字节");
Console.WriteLine($"创建日期: {fileInfo.CreationTime}");
}
Directory 和 DirectoryInfo 类
类似地,Directory 是用于目录操作的静态类,而 DirectoryInfo 用于处理特定文件夹。
string dirPath = @"C:\Temp\MyFolder";
// 创建目录
Directory.CreateDirectory(dirPath);
// 获取目录信息
DirectoryInfo dirInfo = new DirectoryInfo(dirPath);
if (dirInfo.Exists)
{
Console.WriteLine($"子目录数: {dirInfo.GetDirectories().Length}");
Console.WriteLine($"文件数: {dirInfo.GetFiles().Length}");
}
Path 类
Path 是一个用于处理路径的实用类。它有助于组合路径、提取扩展名和文件名。
string fullPath = @"C:\Temp\myfile.txt";
string fileName = Path.GetFileName(fullPath); // myfile.txt
string extension = Path.GetExtension(fullPath); // .txt
string directory = Path.GetDirectoryName(fullPath); // C:\Temp
string combined = Path.Combine(@"C:\Temp", "newfile.txt"); // C:\Tempewfile.txt
2. 读取和写入文件
在 C# 中有几种读取和写入文件的方法。选择取决于数据大小和所需性能。
读取文本文件
对于小文件,使用单行方法很方便:
// 一行读取整个文件
string text = File.ReadAllText("data.txt");
// 将所有行读入数组
string[] lines = File.ReadAllLines("data.txt");
// 使用 StreamReader 读取(适用于大文件)
using (StreamReader reader = new StreamReader("largefile.txt"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
写入文件
// 写入字符串
File.WriteAllText("output.txt", "Hello, World!");
// 写入字符串数组
string[] lines = { "第一行", "第二行" };
File.WriteAllLines("output.txt", lines);
// 追加到文件末尾
File.AppendAllText("log.txt", $"{DateTime.Now}: 新记录");
// 使用 StreamWriter 写入
using (StreamWriter writer = new StreamWriter("data.txt", append: true))
{
writer.WriteLine("新行");
}
处理二进制文件
对于二进制数据,使用 FileStream 和 BinaryReader/BinaryWriter:
// 写入二进制数据
using (BinaryWriter writer = new BinaryWriter(File.Open("data.bin"