如何将文件读入保存CR/LF的字符串?

gre*_*man 7 c# string newline file carriage-return

如果我问"如何将文件读成字符串"的问题,那么答案就很明显了.然而 - 这里保留了CR/LF的捕获量.

问题是,File.ReadAllText剥离这些字符.StreamReader.ReadToEnd我刚刚将LF转换为CR导致我进行了长时间的调查,其中我有非常明显的代码中的错误;-)

因此,简而言之,如果我有一个包含文件foo\n\r\nbar我想获得foo\n\r\nbar(即内容完全一致),而不是foo bar,foobarfoo\n\n\nbar..Net空间中是否有一些可以使用的方法?

结果应该始终是单个字符串,包含整个文件.

Dou*_*las 9

你确定那些方法是剥夺你的角色的罪魁祸首吗?

我试着写一个快速测试; StreamReader.ReadToEnd保留所有换行符.

string str = "foo\n\r\nbar";
using (Stream ms = new MemoryStream(Encoding.ASCII.GetBytes(str)))
using (StreamReader sr = new StreamReader(ms, Encoding.UTF8))
{
    string str2 = sr.ReadToEnd();
    Console.WriteLine(string.Join(",", str2.Select(c => ((int)c))));
}

// Output: 102,111,111,10,13,10,98,97,114
//           f   o   o \n \r \n  b  a   r
Run Code Online (Sandbox Code Playgroud)

在写入和读取临时文件时,可以获得相同的结果:

string str = "foo\n\r\nbar";
string temp = Path.GetTempFileName();
File.WriteAllText(temp, str);
string str2 = File.ReadAllText(temp);
Console.WriteLine(string.Join(",", str2.Select(c => ((int)c))));
Run Code Online (Sandbox Code Playgroud)

您的换行似乎在其他地方丢失了.


Jes*_*per 6

这段代码将保留LR和CR

string r = File.ReadAllText(@".\TestData\TR120119.TRX", Encoding.ASCII);
Run Code Online (Sandbox Code Playgroud)