2011-08-24 31 views
0

我有一个流读取器,我正在使用它来读取流中的行。这工作得很好,但我希望能够得到最后一行,永远不会以换行符结束,所以readLine()将不会捕获它。从StreamReader获取残余

我将存储这是一个全局变量,并在下一次运行之前追加到流中。

这可能吗?

void readHandler(IAsyncResult result) 
{ 
    tcpClient = (TcpClient)result.AsyncState; 
    StreamReader reader ; 
    string line; 
    using (reader = new StreamReader(stream)) 
    { 
     while((line = reader.ReadLine()) != null){ 
      System.Diagnostics.Debug.Write(line); 
      System.Diagnostics.Debug.Write("\n\n"); 
     } 

    } 
    getData(); 
}  

回答

1

ReadLine确实捕捉,即使它没有后一个断行流的最后一行。例如:

using System; 
using System.IO; 

class Test 
{ 
    static void Main() 
    { 
     string text = "line1\r\nline2"; 

     using (TextReader reader = new StringReader(text)) 
     { 
      string line; 
      while((line = reader.ReadLine()) != null) 
      { 
       Console.WriteLine(line); 
      } 
     } 
    } 
} 

打印:

line1 
line2 

ReadLine()只有返回null当它到达流的末尾,返回数据的所有

+0

任何方式告诉哪一个是最后一行然后我可以提取? –

+1

@Lee:只有一个额外的局部变量...你想避免处理的方式与其余的一样吗?目前还不完全清楚您需要在真实代码中执行哪些操作。 –

+0

啊,是的,对不起,我的坏,它工作! –

0

除非您真的需要逐行执行此操作,否则您可以取消整个循环,只需使用StreamReader.ReadToEnd方法即可。这会给你当前缓冲区中的所有内容。