TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

C的StreamReader和StreamWriter如何读写文本?

2025-08-23
/
0 评论
/
5 阅读
/
正在检测是否收录...
08/23

深入解析C# StreamReader和StreamWriter的核心用法,通过真实场景案例演示如何实现安全高效的文本读写操作,包含编码处理、资源释放等实战技巧。


在C#应用程序开发中,文本文件的读写操作如同数字世界的毛细血管,而StreamReaderStreamWriter正是.NET提供的高效读写工具。本文将从实际工程角度出发,揭示这两个类的正确使用方式。

一、基础读写模式

csharp
// 经典写入范例
using (StreamWriter writer = new StreamWriter("demo.txt", append: true))
{
writer.WriteLine("当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
writer.WriteLine("--------------------------");
}

// 标准读取方案
using (StreamReader reader = new StreamReader("demo.txt"))
{
while (!reader.EndOfStream)
{
Console.WriteLine(reader.ReadLine());
}
}
注意点
1. using语句确保资源释放
2. 构造函数第二个参数控制追加/覆盖模式
3. 默认使用UTF-8编码

二、编码处理实战

中文乱码是常见问题,需要显式指定编码:csharp
// 处理GB2312编码文件
var reader = new StreamReader("legacy.txt", Encoding.GetEncoding("GB2312"));

// 写入带BOM的UTF-8文件
var writer = new StreamWriter("export.csv", false, new UTF8Encoding(true));

三、大文件处理技巧

处理500MB以上的日志文件时,需采用缓冲策略:csharp
const int bufferSize = 1024 * 1024; // 1MB缓冲
char[] buffer = new char[bufferSize];

using (var reader = new StreamReader("huge.log",
Encoding.UTF8, true, bufferSize))
{
int charsRead;
while ((charsRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
ProcessBuffer(buffer, charsRead);
}
}

四、异常处理规范

完整的文件操作应包含异常处理:
csharp try { using (var sr = new StreamReader("config.json")) { string content = sr.ReadToEnd(); // 解析逻辑... } } catch (FileNotFoundException ex) { Logger.Error($"配置文件缺失: {ex.Message}"); CreateDefaultConfig(); } catch (IOException ex) { Logger.Error($"IO异常: {ex.Message}"); throw; }

五、高级应用场景

  1. 异步操作
    csharp async Task WriteLogAsync(string message) { using (var writer = new StreamWriter("app.log", true)) { await writer.WriteLineAsync($"[{DateTime.Now}] {message}"); } }

  2. 自定义流处理:csharp
    MemoryStream memoryStream = new MemoryStream();
    using (var writer = new StreamWriter(memoryStream, Encoding.UTF8, 1024, true))
    {
    writer.Write("内存流测试");
    }

// 重置流位置后可重复读取
memoryStream.Position = 0;

性能优化建议
- 对于频繁写入场景,考虑设置AutoFlush = false
- 读取大文件时优先使用ReadLine而非ReadToEnd
- 考虑使用BufferedStream包装基础流

异常处理C#文件操作流式文本读写编码处理大文件优化
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/36455/(转载时请注明本文出处及文章链接)

评论 (0)

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 强强强
    2025-04-07
  2. jesse
    2025-01-16
  3. sowxkkxwwk
    2024-11-20
  4. zpzscldkea
    2024-11-20
  5. bruvoaaiju
    2024-11-14

标签云