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

Linux服务器上.NET 6程序生成CRLF换行符的解决方案求助

强制生成CRLF换行符的.NET 6解决方案

原代码失效原因

你之前的替换逻辑没起作用,核心问题有两个:

  1. .NET的File.ReadLines或StreamReader.ReadLine会自动将所有换行符(CRLF、LF、CR)统一转为\n,但如果后续用WriteLine写入,它又会把换行符替换成当前环境的Environment.NewLine(Linux下是LF),等于替换操作被覆盖。
  2. 仅在非Windows环境下替换的逻辑,无法覆盖原始文件本身包含混合换行符的场景。

可行解决方案

方案一:直接指定写入时的换行符(推荐)

使用StreamWriter的NewLine属性强制设置为CRLF,这样调用WriteLine时会统一输出\r\n,不受环境影响:

// 假设待合并文件列表为filePaths,输出路径为outputPath
using var writer = new StreamWriter(outputPath, false, Encoding.UTF8);
// 强制设置换行符为CRLF
writer.NewLine = "\r\n";

foreach (var filePath in filePaths)
{
    foreach (var line in File.ReadLines(filePath))
    {
        writer.WriteLine(line);
    }
}

方案二:读取原始内容统一替换所有换行符

如果需要处理原始文件中的各类换行符(LF、CRLF、单独CR),可以读取文件全部内容后统一替换:

var mergedContent = string.Empty;
foreach (var filePath in filePaths)
{
    // 读取原始内容,避免自动转换换行符
    var content = File.ReadAllText(filePath);
    // 替换所有类型的换行符为CRLF
    content = System.Text.RegularExpressions.Regex.Replace(content, @"\r\n|\n|\r", "\r\n");
    mergedContent += content;
}

// 写入最终内容
File.WriteAllText(outputPath, mergedContent, Encoding.UTF8);

方案三:手动拼接内容与CRLF

跳过WriteLine,直接用Write方法手动拼接每行内容和CRLF:

using var writer = new StreamWriter(outputPath, false, Encoding.UTF8);
foreach (var filePath in filePaths)
{
    foreach (var line in File.ReadLines(filePath))
    {
        writer.Write($"{line}\r\n");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:47:19