C#的文件 I/O

2024-10-09 21:50:27 浏览数 (3)

文件 I/O(输入/输出)是任何应用程序中不可或缺的一部分,无论是读取配置文件、写入日志还是处理用户数据。C# 提供了一套强大且灵活的文件 I/O 功能,使得在 .NET 应用程序中处理文件变得简单而高效。本文将深入探讨 C# 中文件 I/O 的核心概念、API、最佳实践以及一些高级技巧。

文件 I/O 的核心概念

在 C# 中,文件 I/O 操作主要涉及以下几个核心概念:

  1. 流(Streams):数据的连续序列,可以是字节流或文本流。
  2. 文件访问模式:如读取、写入、追加等。
  3. 文件共享:控制文件在多个进程间的访问。
  4. 缓冲:提高文件操作的性能。
  5. 异步 I/O:避免阻塞主线程,提高应用程序的响应性。

核心 API

System.IO 命名空间

C# 的文件 I/O 功能主要封装在 System.IO 命名空间中,提供了丰富的类和方法来处理文件和目录。

常用的文件 I/O 类

  1. File :提供静态方法来创建、复制、删除、移动和打开文件。
  2. FileInfo :提供实例方法来操作文件。
  3. FileStream :表示文件的流,用于读写文件。
  4. StreamReader :用于从文本文件中读取字符。
  5. StreamWriter :用于向文本文件写入字符。
  6. Directory DirectoryInfo :用于操作目录。
  7. Path :提供操作文件路径的方法。

基本操作

读取文件

使用 File.ReadAllText 方法
代码语言:javascript复制
string content = File.ReadAllText("example.txt");
使用 StreamReader
代码语言:javascript复制
using (StreamReader reader = new StreamReader("example.txt"))
{
    string content = reader.ReadToEnd();
}

写入文件

使用 File.WriteAllText 方法
代码语言:javascript复制
File.WriteAllText("example.txt", "Hello, World!");
使用 StreamWriter
代码语言:javascript复制
using (StreamWriter writer = new StreamWriter("example.txt"))
{
    writer.WriteLine("Hello, World!");
}

追加文件

代码语言:javascript复制
using (StreamWriter writer = new StreamWriter("example.txt", append: true))
{
    writer.WriteLine("Appended text.");
}

复制、移动和删除文件

代码语言:javascript复制
// 复制文件
File.Copy("source.txt", "destination.txt");

// 移动文件
File.Move("source.txt", "newLocation.txt");

// 删除文件
File.Delete("example.txt");

高级操作

异步文件 I/O

使用 ReadAllTextAsyncWriteAllTextAsync
代码语言:javascript复制
await File.WriteAllTextAsync("example.txt", "Hello, World!");
使用 FileStream 进行异步读写
代码语言:javascript复制
using (FileStream stream = new FileStream("example.bin", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, 4096, useAsync: true))
{
    byte[] data = new byte[stream.Length];
    await stream.ReadAsync(data, 0, data.Length);
    // 处理数据...
}

处理大文件

对于大文件,使用流式处理可以避免内存溢出。

代码语言:javascript复制
using (StreamReader reader = new StreamReader("largefile.txt"))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        // 处理每一行
    }
}

文件访问模式和共享

代码语言:javascript复制
using (FileStream stream = new FileStream("example.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
    // 读取文件
}

缓冲和性能

使用缓冲可以显著提高文件操作的性能。

代码语言:javascript复制
using (BufferedStream buffer = new BufferedStream(stream))
{
    // 读写操作
}

监控文件系统

使用 FileSystemWatcher 来监控文件和目录的变化。

代码语言:javascript复制
using (FileSystemWatcher watcher = new FileSystemWatcher())
{
    watcher.Path = "C:\examplePath";
    watcher.NotifyFilter = NotifyFilters.LastWrite;
    watcher.Filter = "*.txt";

    watcher.Changed  = OnChanged;
    watcher.EnableRaisingEvents = true;
}

static void OnChanged(object source, FileSystemEventArgs e)
{
    Console.WriteLine($"File: {e.FullPath} {e.ChangeType}");
}

错误处理

在进行文件 I/O 操作时,应该考虑到可能发生的异常,如 IOExceptionUnauthorizedAccessException 等。

代码语言:javascript复制
try
{
    // 文件操作...
}
catch (IOException ex)
{
    // 处理 I/O 异常
}
catch (UnauthorizedAccessException ex)
{
    // 处理访问权限异常
}

0 人点赞