151 lines
3.2 KiB
Markdown
151 lines
3.2 KiB
Markdown
# 第九课:文件读写
|
||
|
||
## 基本文件操作
|
||
|
||
```csharp
|
||
using System.IO;
|
||
|
||
// 写入文本
|
||
File.WriteAllText("test.txt", "你好,无言势字幕");
|
||
|
||
// 读取文本
|
||
string content = File.ReadAllText("test.txt");
|
||
```
|
||
|
||
## 路径操作
|
||
|
||
```csharp
|
||
// 路径拼接
|
||
string path = Path.Combine("C:", "Users", "test", "config.json");
|
||
|
||
// 获取扩展名
|
||
string ext = Path.GetExtension("test.txt"); // ".txt"
|
||
|
||
// 获取文件名
|
||
string name = Path.GetFileName("C:/test/test.txt"); // "test.txt"
|
||
|
||
// 判断文件是否存在
|
||
bool exists = File.Exists("config.json");
|
||
```
|
||
|
||
## 读取文件
|
||
|
||
```csharp
|
||
// 方式1:一次性读取(适合小文件)
|
||
string content = File.ReadAllText("test.txt");
|
||
|
||
// 方式2:按行读取
|
||
string[] lines = File.ReadAllLines("test.txt");
|
||
foreach (string line in lines)
|
||
{
|
||
Console.WriteLine(line);
|
||
}
|
||
|
||
// 方式3:流式读取(大文件)
|
||
using (StreamReader reader = new StreamReader("test.txt"))
|
||
{
|
||
while (!reader.EndOfStream)
|
||
{
|
||
string line = reader.ReadLine();
|
||
Console.WriteLine(line);
|
||
}
|
||
}
|
||
```
|
||
|
||
## 写入文件
|
||
|
||
```csharp
|
||
// 方式1:一次性写入
|
||
File.WriteAllText("output.txt", "内容");
|
||
|
||
// 方式2:按行写入
|
||
string[] lines = { "第一行", "第二行", "第三行" };
|
||
File.WriteAllLines("output.txt", lines);
|
||
|
||
// 方式3:追加内容
|
||
File.AppendAllText("log.txt", "新追加的内容\n");
|
||
|
||
// 方式4:流式写入
|
||
using (StreamWriter writer = new StreamWriter("output.txt"))
|
||
{
|
||
writer.WriteLine("第一行");
|
||
writer.WriteLine("第二行");
|
||
}
|
||
```
|
||
|
||
## JSON 序列化
|
||
|
||
.NET 内置 JSON 支持(System.Text.Json):
|
||
|
||
```csharp
|
||
using System.Text.Json;
|
||
using System.Text.Json.Serialization;
|
||
|
||
// 序列化(对象 -> JSON)
|
||
class Person
|
||
{
|
||
public string Name { get; set; }
|
||
public int Age { get; set; }
|
||
}
|
||
|
||
Person p = new Person { Name = "无言势", Age = 25 };
|
||
string json = JsonSerializer.Serialize(p);
|
||
Console.WriteLine(json);
|
||
// 输出: {"Name":"无言势","Age":25}
|
||
|
||
// 反序列化(JSON -> 对象)
|
||
string jsonStr = "{\"Name\":\"玩家A\",\"Age\":30}";
|
||
Person p2 = JsonSerializer.Deserialize<Person>(jsonStr);
|
||
Console.WriteLine(p2.Name); // "玩家A"
|
||
```
|
||
|
||
## 配置文件示例
|
||
|
||
```csharp
|
||
// AppSettings 类
|
||
class AppSettings
|
||
{
|
||
public int Sensitivity { get; set; } = 70;
|
||
public bool AutoConnect { get; set; } = true;
|
||
public bool VadEnabled { get; set; } = true;
|
||
public string Language { get; set; } = "zh-CN";
|
||
}
|
||
|
||
// 保存配置
|
||
AppSettings settings = new AppSettings();
|
||
string json = JsonSerializer.Serialize(settings, new JsonSerializerOptions { WriteIndented = true });
|
||
File.WriteAllText("config.json", json);
|
||
|
||
// 读取配置
|
||
string loaded = File.ReadAllText("config.json");
|
||
AppSettings loadedSettings = JsonSerializer.Deserialize<AppSettings>(loaded);
|
||
```
|
||
|
||
## using 语句自动关闭
|
||
|
||
```csharp
|
||
// StreamReader/Writer 必须关闭,否则文件被锁定
|
||
using (StreamReader reader = new StreamReader("test.txt"))
|
||
{
|
||
string line = reader.ReadLine();
|
||
}
|
||
// 作用域结束后自动 Close()
|
||
```
|
||
|
||
## 常见错误处理
|
||
|
||
```csharp
|
||
try
|
||
{
|
||
string content = File.ReadAllText("notexist.txt");
|
||
}
|
||
catch (FileNotFoundException)
|
||
{
|
||
Console.WriteLine("文件不存在");
|
||
}
|
||
catch (IOException ex)
|
||
{
|
||
Console.WriteLine($"IO错误: {ex.Message}");
|
||
}
|
||
```
|