Z
ZHANK
编程在线教程C# 教程文件与流操作
异步编程

文件与流操作

File.ReadAllText/WriteAllText、StreamReader/Writer、异步 IO

文件与流操作

C# 的 System.IO 命名空间提供了简洁的文件 API——File 静态类一行读/写;Stream 处理大文件和网络流。

学完本章你将: 掌握 File.ReadAllText/WriteAllText、StreamReader/Writer、异步 IO。


File 静态类(最简单)

csharp
// 读
string content = File.ReadAllText("data.txt");
string[] lines = File.ReadAllLines("data.txt");
byte[] bytes = File.ReadAllBytes("image.png");

// 写
File.WriteAllText("output.txt", "Hello, C#!");
File.WriteAllLines("output.txt", new[] { "line1", "line2" });
File.AppendAllText("log.txt", $"[{DateTime.Now}] 事件\n");

// 判断
bool exists = File.Exists("data.txt");

// 删除
File.Delete("temp.txt");

StreamReader / StreamWriter(大文件)

csharp
// 逐行读(内存友好)
using var reader = new StreamReader("large.csv");
while (!reader.EndOfStream)
{
    string? line = reader.ReadLine();
    ProcessLine(line);
}

// 写文件
using var writer = new StreamWriter("output.txt");
writer.WriteLine("第一行");
writer.WriteLine("第二行");

异步 IO

csharp
// 异步读——不阻塞线程
string content = await File.ReadAllTextAsync("data.txt");
await File.WriteAllTextAsync("output.txt", "Hello async");

// 异步逐行读
await foreach (var line in File.ReadLinesAsync("large.csv"))  // .NET 6+
{
    await ProcessLineAsync(line);
}

Path 辅助类

csharp
string dir = Path.GetDirectoryName(fullPath);
string ext = Path.GetExtension("file.txt");   // ".txt"
string name = Path.GetFileNameWithoutExtension(fullPath);
string combined = Path.Combine("dir", "sub", "file.txt");