在C#中处理文件系统:从理论到实践
文件系统操作是每位开发人员都会遇到的基本任务之一。无论是日志记录、配置文件处理、数据导入还是报告生成——在C#(.NET)中熟练地读取、写入和管理文件在任何项目中都是必需的。在本文中,我们将从简单操作到目录处理,详细讲解C#中文件系统操作的实用示例。
我们将使用System.IO命名空间,它提供了与文件系统交互所需的所有类。
1. 文件和文件夹操作的核心类
在编写代码之前,了解关键类非常重要:
- File — 用于创建、复制、删除和移动文件的静态类。
- FileInfo — 提供特定文件信息及其操作方法的实例类。
- Directory — 用于操作文件夹的静态类。
- DirectoryInfo — 用于获取文件夹信息的实例类。
- Path — 用于处理文件路径的实用类。
我们来看一个最简单的示例——检查文件是否存在并创建它:
using System;using System.IO;
class Program{ static void Main() { string filePath = @"C:\\Test\\example.txt";
if (File.Exists(filePath)) { Console.WriteLine("文件存在。"); } else { File.Create(filePath).Close(); Console.WriteLine("文件已创建。"); } }}请注意:在File.Create()之后,我们调用了Close()以释放流。在现代项目中,最好使用using语句。
2. 文本文件的读取与写入
最常见的场景是读取和写入文本信息。在C#中,有方便的StreamReader和StreamWriter类。
2.1 向文件写入数据
使用StreamWriter向文件写入字符串的示例:
string path = @"C:\\Test\\log.txt";string[] lines = { "第一行", "第二行", "第三行" };
using (StreamWriter writer = new StreamWriter(path, false)){ foreach (string line in lines) { writer.WriteLine(line); }}Console.WriteLine("数据已写入。");StreamWriter构造函数的第二个参数false表示覆盖文件。如果指定true,数据将追加到文件末尾。
2.2 从文件读取数据
读取全部内容或逐行读取:
string path = @"C:\\Test\\log.txt";
// 一次性读取全部文本string allText = File.ReadAllText(path);Console.WriteLine("全部文本:" + allText);
// 逐行读取string[] allLines = File.ReadAllLines(path);Console.WriteLine("逐行读取:");foreach (string line in allLines){ Console.WriteLine(line);}对于大文件,最好使用StreamReader在循环中逐行读取,以避免将整个文件加载到内存中。
using (StreamReader reader = new StreamReader(path)){ string currentLine; while ((currentLine = reader.ReadLine()) != null) { Console.WriteLine(currentLine); }}3. 二进制文件操作(FileStream)
当需要处理二进制数据(如图像、压缩文件、序列化对象)时,使用FileStream类。它允许以字节形式读取和写入数据。
写入和读取字节数组的示例: