2014-10-04 77 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的,所以它不能完成。在哪條線上拋出異常? – 2014-10-04 11:08:06

+0

at streamwriter.Close(); – 2014-10-04 11:11:23

+0

我也試過WebClient,但沒有結果 – 2014-10-04 11:12:02

回答

0

我認爲問題是,你寫的流不匹配長度你在Content-Length標題中指出:因爲你使用的是streamwriter.WriteLine,所以你還要寫一個回車+換行符,它不會計入你發送的內容長度中。

舉例來說,如果你的postdata"foo"Encoding.UTF8.GetBytes(postdata).Length將返回3,但streamwriter.WriteLine(postdata)實際上寫"foo\r\n",這是5個字節。

你只需要使用Write,而不是WriteLine(或者,如果你想保持它計數的內容長度的新行)

+0

謝謝@Thomas – 2014-10-06 09:05:43

相關問題