2011-09-02 38 views
1

我们有一个自动生成并放入Web服务器的文本文件。任务是逐行读取文件并将记录插入到数据库中。下面的代码是在C#:使用WebRequest和WebClient时的结果不同

  WebRequest request = WebRequest.Create(url); 
      WebResponse response = request.GetResponse(); 
      StreamReader r = new StreamReader(response.GetResponseStream()); 

      while (r.Peek() > -1) 
      { 
       string s = r.ReadLine().Trim(); 
       //insert string into a db. 
      } 

当我做到这一点我不断得到其范围从9000整个文件 - 10000线。在另一方面,当我使用以下有时我得到一个截断的文件(减去行)

  WebClient client = new WebClient(); 
      StreamReader r = new StreamReader(client.OpenRead(url)); 

      while (r.Peek() > -1) 
      { 
       string s = r.ReadLine().Trim(); 
       //insert string into a db. 
      } 

任何人都可以解释的区别?为什么结果会不一样?我的印象是WebClient只是HttpWebRequest的包装。

+0

WebClient OpenRead方法是WebRequest的一个包装。实际上,它看起来与您发布的WebRequest代码几乎完全相同。我在ILSpy中检查了WebCLient以确认。我怀疑问题在于其他地方。你能调试并确认你正在阅读的行是你期望的吗? – rtalbot

回答

0

使用Peek方法,你保证有一个完整的线准备好是红色的。

我敢打赌,你会得到部分线条(实际上是在当前流位置打破)。

事实上,我不认为它与这两个班级中的任何一个有关,而更多的是与您如何阅读结果有关。

您是否试过WebClient.DownloadString()方法?

+0

这是个好主意(使用DownloadString()方法),然后将字符串拆分成单独的记录进行插入。有用。 – Carlos

+0

只是要小心字符串的长度......如果目标非常非常长(几MB),您将不得不等待整个文件下载,并且您的内存消耗将会很高 –

相关问题