Stream Reader Readline检测换行符

Der*_*rek 0 c# string streamreader

我正在尝试从日志文件中的每一行文本中删除所有“换行”字符。

以下是我正在使用Stream Reader读取的示例条目:-

<![LOG[Raising event:
[SMS_CodePage(850), SMS_LocaleID(2057)]
instance of SoftDistProgramStartedEvent
{
    AdvertisementId = "000216F6";
    ClientID = "GUID:B55C2757-CBAE-468E-B54F-46CAF2ECF68F";
    CommandLine = "\"C:\\WINNT\\system32\\cscript.exe\" /nologo Shutdown_Desktops_Overnight.vbs";
    DateTime = "20130211080211.784000+000";
    MachineName = "DWD*****";
    PackageName = "0000073C";
    ProcessID = 2516;
    ProgramName = "Shutdown Desktops Overnight";
    SiteCode = "S00";
    ThreadID = 3640;
    UserContext = "NT AUTHORITY\\SYSTEM";
    WorkingDirectory = "C:\\WINNT\\system32\\CCM\\Cache\\0000073C.1.System\\";
};
]LOG]!><time="08:02:11.800+000" date="02-11-2013" component="execmgr" context="" type="1" thread="3640" file="event.cpp:522">
Run Code Online (Sandbox Code Playgroud)

在实际的日志文件中,该文件在文件中显示为一行,而“新行字符”用正方形替换。

我正在使用以下代码读取日志条目:-

using (StreamReader sr = new StreamReader(@"C:\Documents and Settings\riversd\Desktop\Logfile2.log"))
        {
            string Line;

            while ((Line = sr.ReadLine()) != null)
            {

            }
        }
Run Code Online (Sandbox Code Playgroud)

问题是,当StreamReader从txt文件读取此条目时,它会在以下位置中断:-

"<![LOG[Raising event:"
Run Code Online (Sandbox Code Playgroud)

我需要立即删除此条目中的所有换行符。我不想将整个文件读入内存,然后将其删除,我宁愿在读取每个日志时对其进行处理。

可能吗?

Dav*_*der 7

由于StreamReader.ReadLineMSDN文档中的以下详细信息,对Replace的调用无法正常工作

行定义为一系列字符,后跟换行符(“ \ n”),回车符(“ \ r”)或回车符后紧跟换行符(“ \ r \ n”)。返回的字符串不包含终止的回车符或换行符

因此,如果要使用StreamReader.ReadLine读取输入内容,则可以使用StringBuilder.Append(不是AppendLine)构建一个新字符串,因为StreamReader.ReadLine隐式删除了新行字符。

var filePath = "text.txt";
StringBuilder sb = new StringBuilder();

using (StreamReader reader = new StreamReader(filePath))
{
    while (!reader.EndOfStream)
    {
        sb.Append(reader.ReadLine());
    }
}

File.WriteAllText(filePath, sb.ToString());
Run Code Online (Sandbox Code Playgroud)