在.Net Framework 3.5及以下版本中,CopyTo()和WriteTo()的等效方法是什么

本文关键字:WriteTo 是什么 方法 CopyTo Framework Net 版本 | 更新日期: 2023-09-27 18:10:31

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

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

"System.IO.Stream"不包含"WriteTo"的定义,也找不到接受类型为"System.IO.Stream"的第一个参数的扩展方法"WriteTo

这是代码:

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!");

在.Net Framework 3.5及以下版本中,CopyTo()和WriteTo()的等效方法是什么

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

  2. 没有Stream.WriteTo。它只存在于一些子类上(例如MemoryStream.WriteTo,它从.NET 1.0开始就存在(

(我怀疑Stream.CopyTo是作为常见的MemoryStream.WriteTo添加的,但显然使用WriteTo将是API的突破性变化,因为例如,对其进行反思会给出不同的结果。(

如果您需要CopyTo I,请使用此扩展

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);
   }
}