You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

StreamReader.ReadLine()为何忽略换行符?技术求助

为什么StreamReader.ReadLine()会忽略文本换行符,导致段落合并?

你碰到的问题其实是StreamReader.ReadLine()的设计特性导致的——这个方法读取一行内容时,会自动丢弃每行末尾的换行符,甚至连那些只包含换行符的空白行,读取后也会变成空字符串。你现在的代码只是把读取到的每行内容直接拼接,完全没把换行符加回去,自然原本的段落分隔就消失了,所有内容挤成了一大段。

咱们来拆解下你的代码逻辑:
当你读取空白行时,currentLine会是空字符串,你直接把它加到m_content里,相当于什么都没加;而读取非空白行时,也只加了行内容,没加原本的换行符,所以所有行都连在一起了。

这里给你两个解决思路:

1. 手动补充换行符(简单直接)

修改循环逻辑,每次读取后把换行符加回去,这样就能还原文件里的换行和空白行:

currentLine = sr.ReadLine();
while (currentLine != "[/CONTENT]")
{
    // 先加当前行内容,再补上换行符
    m_content += currentLine + Environment.NewLine;
    currentLine = sr.ReadLine();
}

Environment.NewLine会根据系统自动用合适的换行符(Windows是\r\n,Linux是\n),比硬编码更通用。

2. 用StringBuilder优化性能(适合大文件)

如果你的文本文件比较大,多次字符串拼接会有性能损耗,推荐用StringBuilder来处理,它的AppendLine()方法会自动帮你加换行符:

System.Text.StringBuilder contentBuilder = new System.Text.StringBuilder();
currentLine = sr.ReadLine();
while (currentLine != "[/CONTENT]")
{
    contentBuilder.AppendLine(currentLine);
    currentLine = sr.ReadLine();
}
m_content = contentBuilder.ToString();

这个方法不仅能保留所有换行和空白行,还比直接拼接字符串高效得多。

另外你提到可以显式处理——其实上面的两种方式已经帮你做到了:当读取到空白行时,currentLine是空字符串,AppendLine()或者手动加Environment.NewLine后,就会在内容里生成一个空的换行,完美保留原文件的段落分隔。

内容的提问来源于stack exchange,提问作者Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:26:21