内存流错误的副本

时间:2013-09-17 09:36:53

标签: c# stream httpwebrequest memorystream

我在将数据从MemoryStream复制到请求流时遇到问题。

var Request = (HttpWebRequest.Create(Url) as HttpWebRequest);
Request.Method = "PUT";
Stream RequestStream = Request.GetRequestStream();

// write to MemoryStream
var MemStream = new MemoryStream();
byte[] Test = Encoding.ASCII.GetBytes("test000\r\n");
MemStream.Write(Test, 0, Test.Length);

// test writing correctly
byte[] B = MemStream.ToArray();
System.Windows.Forms.MessageBox.Show(Encoding.ASCII.GetString(B)); // shows data correctly

// copy data to request stream(not working!)
MemStream.CopyTo(RequestStream);

// add new data to request stream(working)
byte[] Test1 = Encoding.ASCII.GetBytes("test111");
RequestStream.Write(Test1, 0, Test1.Length);

仅向服务器发送“test111”。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

复制以从当前位置复制数据。所以当位置结束时它无法复制。其中ToArray返回所有数据而不考虑位置。

  

复制从当前流中的当前位置开始,并且在复制操作完成后不会重置目标流的位置。

试试这个

MemStream.Position = 0;
MemStream.CopyTo(RequestStream);

有关详细信息,请参阅Stream.CopyTo

答案 1 :(得分:1)

记忆流的位置在最后。因为MemStream.Write(Test, 0, Test.Length);

使用:

// copy data to request stream(would work!)
MemStream.Position = 0;
MemStream.CopyTo(RequestStream);

答案 2 :(得分:1)

设置MemoryStream对象Position = 0并使用CopyTo方法

MemStream.Position = 0; MemStream.CopyTo(RequestStream);