C# C用{LF}替换{CRLF}

C# C用{LF}替换{CRLF},c#,C#,我有一个别人发来的文本文件。如果我在NotePad++中打开并查看所有符号,我可以看到{LF}和{CRLF}都用作行分隔符 例如: 第1行:ABC{CRLF} 第2行:XYZ{LF} 问题:如果我想用{LF}替换{CRLF}并写入一个新文件,为什么输出文本文件不能显示单独的行并且分隔符符号消失。Write只写一行并附加另一行,而不开始新行,但该行中仍然有{LF},不是吗?这是因为我在Windows系统中工作吗?但是,如何将包含{LF}和{CR}{LF}的原始文件视为两行 代码非常简单: usin

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

例如:

第1行:ABC{CRLF}

第2行:XYZ{LF}

问题:如果我想用{LF}替换{CRLF}并写入一个新文件,为什么输出文本文件不能显示单独的行并且分隔符符号消失。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"));
        }
    }
}
当您使用ReadLine时,您正在修剪下线字符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"));        
    }
}


但前提是你的文件不是太大。否则,Jim解决方案就是最好的选择。

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

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

while ((line = sr.ReadLine()) != null)
{
    sw.Write(line + "\n");
}
您可以使用以下方法简化代码:

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

StreamReader已经知道如何正确处理此类文件。并去掉行终止符,这样Replace调用将不起任何作用,您只需要StreamWriter.WriteLine。您希望如何在.ReadLine返回的字符串中找到\r\n?好的,ty all,以前没有意识到。希望文件足够小,可以放入内存。@JimMischel Yeah,我正要在帖子中添加一些类似于您发布的内容
File.WriteAllLines("outputFileName",
   FileReadLines("inputFileName").Select(s => s + "\n");