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` 更稳健。

相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
神仙别闹3 天前
基于C#+MySQL实现(WinForm)个人聊天室软件
c#
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net