在.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!");
-
Stream.CopyTo
确实添加了.NET 4。.NET的早期版本缺少在后一版本中添加的许多有用的方法。NET 4.5仍然缺少许多"明显"的方法,我认为如果MS认为有足够的需求,未来的版本将继续添加这样的助手。 -
没有
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);
}
}