2011-09-02 40 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),您將不得不等待整個文件下載,並且您的內存消耗將會很高 –

相關問題