C#将{CRLF}替换为{LF}

时间:2018-06-29 18:29:38

标签: c#

我有一个别人发送的文本文件。如果在NotePad ++中打开并查看所有符号,则可以看到{LF}和{CRLF}都可以用作行分隔符。

示例:

第1行: ABC {CRLF}

第2行: XYZ {LF}

问题::如果我想将{CRLF}替换为{LF}并写入新文件,为什么输出文本文件不能显示单独的行并且分隔符消失了。 Write只是写了一行并追加了另一行而没有开始新的一行,但是该行中仍然有{LF},不是吗?那是因为我在Windows系统中工作吗?但是如何将同时具有{LF}{CR}{LF}的原始文件视为两条单独的行?

代码非常简单:

using (StreamReader sr = new StreamReader(@"\\...\TEST.txt"))
{
    using (StreamWriter sw = new StreamWriter(@"\\...\TEST2.txt"))
    {
        string line = "";

        while ((line = sr.ReadLine()) != null)
        {
            sw.Write(line.Replace("\r\n", "\n"));
        }
    }
}

2 个答案:

答案 0 :(得分:3)

使用ReadLine()时,将修剪EOL字符(CR和LF)。相反,您应该执行以下其中一种方式:

string file1 = @"\\...\TEST.txt";
string file2 = @"\\...\TEST2.txt";

using (StreamReader sr = new StreamReader(file1))
{
    using (StreamWriter sw = new StreamWriter(file2))
    {
        string text = sr.ReadToEnd();        
        sw.Write(text.Replace("\r\n", "\n"));        
    }
}

File.WriteAllText(file2,File.ReadAllText(file1).Replace("\r\n", "\n"));

但是仅当您的文件不是太大时。否则,吉姆解决方案是必经之路。

答案 1 :(得分:3)

您的代码不起作用,因为当您调用sr.Readline()时,返回的字符串不包含CRLF字符。这些字符由WriteLine添加,实际上是Write(s + Environment.NewLine)

要使您的代码正常工作,请将其更改为

while ((line = sr.ReadLine()) != null)
{
    sw.Write(line + "\n");
}

您可以使用以下方法简化代码:

File.WriteAllLines("outputFileName",
   FileReadLines("inputFileName").Select(s => s + "\n");