1

我需要为我的应用程序使用 .NetFramework3.5,但是3.5CopyTo()WriteTo()没有方法。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!");
4

2 回答 2

2
  1. Stream.CopyTo确实是在 .NET 4 中添加的。早期版本的 .NET 缺少许多在后期版本中添加的有用方法。.NET 4.5 仍然缺少许多“明显”的方法,我认为如果 MS 感知到足够的需求,未来的版本将继续添加此类帮助程序。

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

(我怀疑Stream.CopyTo被添加为常见MemoryStream.WriteTo但显然 usingWriteTo将是 API 的重大更改,因为例如,对其进行反思会产生不同的结果。)

于 2013-04-23T08:21:14.930 回答
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);
   }
}
于 2014-03-13T09:54:48.323 回答