C#:文本文件读取

C#读取文本文件主要有三种方式:`File` 静态类、`StreamReader` 流式读取和 `FileStream` 字节流操作。日常使用推荐 `StreamReader`,简单场景用 `File.ReadAllText` 更快。

📖 基础读取:File 静态类

适合小文件,一行代码搞定,简单直接。

// 一次性读取全部文本

string text = System.IO.File.ReadAllText(@"C:\test.txt");

// 逐行读取到字符串数组

string\[\] lines = System.IO.File.ReadAllLines(@"C:\test.txt");

```

这种方式代码最简洁,但会把整个文件加载进内存,大文件(比如几百MB)时容易内存暴涨,不推荐。

🚀 推荐:StreamReader 流式读取

适合大多数场景,尤其是大文件。它逐行处理,内存占用稳定,还能指定编码(UTF-8、ASCII等)。记得用 `using` 语句自动释放资源。

using System;

using System.IO;

using System.Text;

class Program

{

static void Main()

{

string filePath = @"C:\test.txt";

// 使用 using 确保 StreamReader 正确关闭

using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8))

{

string line;

// 逐行读取,直到文件末尾(返回 null)

while ((line = reader.ReadLine()) != null)

{

Console.WriteLine(line);

}

}

}

}

```

`StreamReader` 也支持 `ReadToEnd()` 一次性读完整段文本,但同样要注意文件大小。

⚙️ 进阶:FileStream 字节级操作

这是最底层的方案,可以精确控制每次读取的字节数,适合处理二进制文件或需要精细控制内存的场景。

```csharp

using System;

using System.IO;

using System.Text;

class Program

{

static void Main()

{

string filePath = @"C:\test.txt";

using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))

{

byte\[\] buffer = new bytefs.Length;

int bytesRead = fs.Read(buffer, 0, buffer.Length);

string text = Encoding.UTF8.GetString(buffer, 0, bytesRead);

Console.WriteLine(text);

}

}

}

`FileStream` 功能最强,但代码也最繁琐,日常读文本文件时用 `StreamReader` 通常更顺手。

💡 场景对比

性能参考:实测读取1GB文本文件,`ReadAllText` 峰值内存约2.1GB,耗时约3.2秒;而 `StreamReader.ReadLine()` 循环内存峰值不到15MB,耗时约2.4秒。大文件场景下差距非常明显。

⚠️ 易错点

  1. 编码问题:读取中文文件时,如果默认编码不对,会显示乱码。建议显式指定 `Encoding.UTF8` 或 `Encoding.Default`。

  2. 文件不存在:读取前建议用 `File.Exists()` 判断,或把代码放在 `try-catch` 里捕获 `FileNotFoundException`。

  3. 资源释放:所有流类(`StreamReader`、`FileStream`)用完必须关闭,否则文件会被锁定,推荐用 `using` 语句自动处理。

  4. 路径问题:避免硬编码绝对路径,用相对路径或 `Path.Combine` 更稳健。

相关推荐
keyipatience6 分钟前
JS学习笔记(2)数组,函数,作用域,对象
前端·javascript·笔记·学习·html
2603_965148118 分钟前
商品价格监控 API 接口:从原理到实战的完整指南
java·前端·数据库·python·生活
瑞克-桑切斯8 分钟前
2、Shell 条件语句
java·linux·服务器
酷虎软件20 分钟前
视频加字幕怎么制作
java·前端·音视频
Geoffwo30 分钟前
robotjs0.6.0鼠标中轴滚动失效修复方案
前端·javascript
彭亚川Allen40 分钟前
从零手搓 RAG 之文档解析技术
前端·后端·架构
梦帮科技1 小时前
Linux 内存取证学与 Rootkit 猎杀——Volatility 核心剖析与内核隐藏模块逆向清除
linux·运维·服务器·神经网络·算法·网络安全
无足鸟ICT1 小时前
【RHCA+】软件包
linux·运维·服务器
oicola1 小时前
Ant Design v5 vs Tailwind CSS:组件库与样式框架的终极对决
前端·css
溪语流沙1 小时前
【Web全栈进阶】Vue Router + Pinia:SPA路由与全局状态
前端·javascript·vue.js