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

相关推荐
Ruiery1 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
柚yuzumi1 小时前
前端优化,从少触发一次开始:防抖与节流
前端·javascript
2601_967338711 小时前
C#上位机开发零基础入门到精通全套视频
开发语言·c#
默_笙1 小时前
🚤 CSS 布局的"圈地运动":BFC 就是浏览器的独立领地
前端·javascript
snow@li1 小时前
服务器运维:Alibaba Cloud Linux 4 LTS 64位 根目录全景深度解析文章
linux·运维·服务器
我爱写代码i1 小时前
AI对话绘画数字人源码 - uniapp前端
前端·人工智能·uni-app
苏生Susheng2 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
OpenTiny社区2 小时前
太酷了!装上OpenTiny dsh‑genui这个插件,你的DeepSeek Harness点击就能干活了!
前端·ai编程
ModyQyW2 小时前
vite-plugin-uni-pages 更新了什么
前端·uni-app