.Net Framework 3.5及更低版本中CopyTo()和WriteTo()的等效方法是什么?

时间:2013-04-23 08:10:37

标签: c# .net-framework-version

我需要为我的应用程序使用.NetFramework3.5,但3.5中没有CopyTo()WriteTo()方法。 3.5中的等效方法是什么?

当我用3.5运行代码时,它会抛出以下错误:

  

'System.IO.Stream'不包含'WriteTo'的定义,并且没有扩展方法'WriteTo'接受类型'System.IO.Stream'的第一个参数可以找到

以下是代码:

int fileId = 1;
foreach (string uri in uriList)
{

    request = (HttpWebRequest)WebRequest.Create (baseURL + uri);
    request.Headers.Add ("X", authenticateStr);
    request.Accept = "application/pdf";
    request.Method = "GET";

    webResponse = (HttpWebResponse)request.GetResponse();
    using (MemoryStream ms = new MemoryStream())
    using (FileStream outfile = new FileStream("document_", FileMode.Create)) {
        webResponse.GetResponseStream().WriteTo(ms);
        if (ms.Length > int.MaxValue) {
            throw new NotSupportedException("Cannot write a file larger than 2GB.");
        }
        outfile.Write(ms.GetBuffer(), 0, (int)ms.Length);
    }
}
Console.WriteLine("Done!");

2 个答案:

答案 0 :(得分:2)

    确实在.NET 4中添加了
  1. Stream.CopyTo。早期版本的.NET缺少在后续版本中添加的许多有用的方法。 .NET 4.5继续缺少许多“明显”的方法,我认为如果MS认为有足够的需求,未来版本将继续增加这样的帮助。

  2. 没有Stream.WriteTo。它只存在于某些子类上(例如,自.NET 1.0以来就存在的MemoryStream.WriteTo)。

  3. (我怀疑Stream.CopyTo是作为常见的MemoryStream.WriteTo添加的,但显然使用WriteTo会导致API更改,例如,对其进行反思会产生不同的结果。)< / p>

答案 1 :(得分:0)

如果您需要CopyTo我使用此扩展程序

public static void CopyTo(this Stream input, Stream output)
{
   // This method exists only in .NET 4 and higher

   byte[] buffer = new byte[4 * 1024];
   int bytesRead;

   while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0)
   {
      output.Write(buffer, 0, bytesRead);
   }
}