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}");
|
|||
|
|
}
|
|||
|
|
```
|