C# 文件 I/O 操作详解:从基础到高级应用

发布于:2025-06-02 ⋅ 阅读:(34) ⋅ 点赞:(0)

在软件开发中,文件操作(I/O)是一项基本且重要的功能。无论是读取配置文件、存储用户数据,还是处理日志文件,C# 都提供了丰富的 API 来高效地进行文件读写操作。本文将全面介绍 C# 中的文件 I/O 操作,涵盖基础文件操作、文本/二进制文件读写、流式处理、异步 I/O 以及最佳实践,帮助开发者掌握文件处理的技巧。

1. C# 文件操作基础

C# 的文件操作主要依赖于 System.IO 命名空间,其中 FileDirectoryStreamReaderStreamWriter 等类是核心工具。

1.1 检查文件是否存在

在操作文件之前,通常需要检查文件是否存在:

string filePath = @"C:\example\test.txt";
if (File.Exists(filePath))
{
    Console.WriteLine("文件存在");
}
else
{
    Console.WriteLine("文件不存在");
}

1.2 创建、删除和移动文件

  • 创建文件

    File.Create(@"C:\example\newfile.txt");
  • 删除文件

    File.Delete(@"C:\example\oldfile.txt");
  • 移动/重命名文件

    File.Move(@"C:\example\oldname.txt", @"C:\example\newname.txt");
  • 复制文件

    File.Copy(@"C:\example\source.txt", @"C:\example\destination.txt");

2. 文本文件的读写

2.1 读取文本文件

C# 提供了多种读取文本文件的方式:

  • File.ReadAllText(读取整个文件)

    string content = File.ReadAllText(filePath);
    Console.WriteLine(content);
  • File.ReadAllLines(逐行读取)

    string[] lines = File.ReadAllLines(filePath);
    foreach (string line in lines)
    {
        Console.WriteLine(line);
    }
  • StreamReader(流式读取,适合大文件)

    using (StreamReader reader = new StreamReader(filePath))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            Console.WriteLine(line);
        }
    }

     

2.2 写入文本文件

  • File.WriteAllText(覆盖写入)

    File.WriteAllText(filePath, "Hello, World!");
  • File.AppendAllText(追加写入)

    File.AppendAllText(filePath, "\nThis is a new line.");
  • StreamWriter(流式写入)

    using (StreamWriter writer = new StreamWriter(filePath))
    {
        writer.WriteLine("Line 1");
        writer.WriteLine("Line 2");
    }

3. 二进制文件的读写

二进制文件(如图片、音频、数据库文件)需要使用 BinaryReader 和 BinaryWriter

3.1 写入二进制文件

using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Create)))
{
    writer.Write(100);         // 写入整数
    writer.Write(3.14);        // 写入双精度浮点数
    writer.Write("Hello");     // 写入字符串
}

3.2 读取二进制文件

using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open)))
{
    int number = reader.ReadInt32();
    double pi = reader.ReadDouble();
    string text = reader.ReadString();
    Console.WriteLine($"Number: {number}, Pi: {pi}, Text: {text}");
}

4. 文件流(FileStream)

FileStream 提供了更底层的文件访问方式,适用于大文件或需要精细控制的情况。

4.1 使用 FileStream 读写文件

// 写入文件
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
    byte[] data = Encoding.UTF8.GetBytes("Hello, FileStream!");
    fs.Write(data, 0, data.Length);
}

// 读取文件
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
    byte[] buffer = new byte[1024];
    int bytesRead = fs.Read(buffer, 0, buffer.Length);
    string content = Encoding.UTF8.GetString(buffer, 0, bytesRead);
    Console.WriteLine(content);
}

5. 目录操作

除了文件操作,C# 还提供了目录管理功能:

5.1 创建和删除目录

string dirPath = @"C:\example\newfolder";

// 创建目录
Directory.CreateDirectory(dirPath);

// 删除目录(recursive: true 表示删除非空目录)
Directory.Delete(dirPath, recursive: true);

5.2 遍历目录

// 获取所有文件
string[] files = Directory.GetFiles(dirPath);
foreach (string file in files)
{
    Console.WriteLine(file);
}

// 获取所有子目录
string[] subDirs = Directory.GetDirectories(dirPath);
foreach (string dir in subDirs)
{
    Console.WriteLine(dir);
}

6. 异步文件操作

异步 I/O 可以提高程序性能,特别是在处理大文件时。

6.1 异步读取文件

async Task<string> ReadFileAsync(string path)
{
    using (StreamReader reader = new StreamReader(path))
    {
        return await reader.ReadToEndAsync();
    }
}

6.2 异步写入文件

async Task WriteFileAsync(string path, string content)
{
    using (StreamWriter writer = new StreamWriter(path))
    {
        await writer.WriteAsync(content);
    }
}

7. 文件操作的最佳实践

  1. 使用 using 语句:确保文件流正确关闭,避免资源泄漏。

  2. 异常处理:捕获 IOExceptionFileNotFoundException 等异常。

  3. 大文件处理:使用流式读取(StreamReader/FileStream)而非一次性读取全部内容。

  4. 路径处理:使用 Path.Combine 拼接路径,避免硬编码:

    string fullPath = Path.Combine(@"C:\example", "subfolder", "file.txt");
  5. 文件权限检查:在访问文件前检查权限(File.GetAccessControl)。

8. 总结

本文详细介绍了 C# 中的文件 I/O 操作,包括:

  • 基本文件操作(创建、删除、移动、复制)

  • 文本文件的读写(File.ReadAllTextStreamReader

  • 二进制文件的处理(BinaryReader/BinaryWriter

  • 文件流(FileStream)的使用

  • 目录管理(Directory 类)

  • 异步文件操作(ReadAsync/WriteAsync

  • 最佳实践(异常处理、资源释放、路径管理)

掌握这些技术后,你可以高效地处理各种文件操作需求,无论是小型配置文件还是大型数据文件。希望本文对你有所帮助!

 


网站公告

今日签到

点亮在社区的每一天
去签到