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