2011-09-02 3 views
1

우리는 자동으로 생성되어 웹 서버에 저장되는 텍스트 파일을 가지고 있습니다. 작업은 파일을 한 줄씩 읽고 데이터베이스에 레코드를 삽입하는 것입니다. 다음 코드는 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), 전체 파일이 다운로드되고 메모리 사용량이 많을 때까지 기다려야합니다 –