2014-10-04 78 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

相关问题