2014-10-04 4 views
0

내 서버에있는 .csv 파일에 일부 출력을 쓰려고합니다. 다음 코드를 사용하지만 여전히 파일에 출력이 없습니다. 은 아무 것도 쓰여지지 않음을 의미합니다. 내 코드는 여기에원격 서버에 CSV 파일을 쓰는 방법은 무엇입니까?

void WriteInRegister(DataRow userdata) 
     { 
      HttpWebRequest reqHTTP; 
      StringBuilder result = new StringBuilder(); 
      try 
      { 
       reqHTTP = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://10.10.10.10/config/RequestPlacer.csv")); 
       reqHTTP.Credentials = new NetworkCredential("usename", "password"); 

       if (reqHTTP != null) 
       { 
        reqHTTP.ContentType = "application/octet-stream"; 
        reqHTTP.Method = WebRequestMethods.File.UploadFile; 
       } 
       string postdata = (userdata[0].ToString() + ",MacId," + DateTime.Now.ToShortDateString()).ToString(); 
       byte[] text = Encoding.UTF8.GetBytes(postdata); 

       reqHTTP.ContentLength = text.Length; 

       /* WebClient wcClient = new WebClient(); 
       wcClient.Credentials = new NetworkCredential("usename", "password"); 
       wcClient.UseDefaultCredentials = true;*/ 
       //wcClient.OpenWrite(new Uri("http://10.10.10.10/config/RequestPlacer.csv"), postdata); 


       // string path = System.Web.HttpContext.Current.Server.MapPath("http://10.10.10.10/config/RequestPlacer.csv"); 
        reqHTTP.AllowWriteStreamBuffering = true; 
        Stream writer = reqHTTP.GetRequestStream(); 
        /* wcClient.Headers.Add("Content-Type", "application/csv"); 
        wcClient.UploadString(new Uri("http://10.10.10.10/config/RequestPlacer.csv"), "POST", postdata);*/ 


       StreamWriter streamwriter = new StreamWriter(writer); 
       streamwriter.WriteLine(postdata); 
       streamwriter.Close(); 
      } 
      catch (Exception exe) 
      { 
       MessageBox.Show(exe.Message); 
      } 
     } 

예외이다 ("요청이 중단되었습니다. 요청이 취소되었습니다")

+0

당신이 요청하는 GetResponse를 호출하지 않는, 그래서 완료 할 수 없습니다. 어떤 줄에서 예외가 발생합니까? –

+0

at last streamwriter.Close(); –

+0

나는 또한 WebClient를 시도했지만 결과가 없음 –

답변

0

내가 문제가 당신이 스트림에 쓰기 어떤 길이와 일치하지 않는다는 것입니다 생각 Content-Length 헤더에 표시 : streamwriter.WriteLine을 사용했기 때문에 전송 한 콘텐츠 길이에 포함되지 않은 캐리지 리턴 + 줄 바꿈도 기록합니다. 예를 들어

, 당신의 postdata"foo", Encoding.UTF8.GetBytes(postdata).Length 3을 반환합니다,하지만 streamwriter.WriteLine(postdata) 실제로 5 바이트 "foo\r\n"을 작성됩니다.

당신은 Write 대신 WriteLine를 사용 (또는 당신이 그것을 유지하려는 경우 콘텐츠 길이의 새로운 라인을 계산) 할 필요가

+0

@Thomas –

관련 문제