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)
我需要立即删除此条目中的所有换行符。我不想将整个文件读入内存,然后将其删除,我宁愿在读取每个日志时对其进行处理。
可能吗?
由于StreamReader.ReadLine的MSDN文档中的以下详细信息,对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)