我需要为我的应用程序使用.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!");
答案 0 :(得分:2)
Stream.CopyTo
。早期版本的.NET缺少在后续版本中添加的许多有用的方法。 .NET 4.5继续缺少许多“明显”的方法,我认为如果MS认为有足够的需求,未来版本将继续增加这样的帮助。
没有Stream.WriteTo
。它只存在于某些子类上(例如,自.NET 1.0以来就存在的MemoryStream.WriteTo
)。
(我怀疑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);
}
}