pro*_*cma 3 c# newline streamreader tfilestream
我有一个逐行读取的流阅读器sr.ReadLine().我的代码用行结尾\r\n和/或来计算行尾\n.
StreamReader sr = new System.IO.StreamReader(sPath, enc);
while (!sr.EndOfStream)
{
// reading 1 line of datafile
string sLine = sr.ReadLine();
...
Run Code Online (Sandbox Code Playgroud)
如何告诉代码(而不是通用sr.ReadLine())我想要计算新行只有一个完整\r\n而不是\n?
使用StreamReader.ReadLine无法执行此操作.根据msdn:
一行被定义为一个字符序列,后跟一个换行符("\n"),一个回车符("\ r"),或一个回车符后面紧跟一个换行符("\ r \n").返回的字符串不包含终止回车符或换行符.如果到达输入流的末尾,则返回的值为null.
因此,只有在你捕获了\ r \n时,你才必须逐字节地读取这个流并返回行
编辑
这是一些代码示例
private static IEnumerable<string> ReadLines(StreamReader stream)
{
StringBuilder sb = new StringBuilder();
int symbol = stream.Peek();
while (symbol != -1)
{
symbol = stream.Read();
if (symbol == 13 && stream.Peek() == 10)
{
stream.Read();
string line = sb.ToString();
sb.Clear();
yield return line;
}
else
sb.Append((char)symbol);
}
yield return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
你可以像使用它一样
foreach (string line in ReadLines(stream))
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
你不能用ReadLine来做,但你可以这样做:
stream.ReadToEnd().Split(new[] {"\r\n"}, StringSplitOptions.None)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10126 次 |
| 最近记录: |