System.IO.Stream不包含CopyTo()的定义

时间:2013-06-30 13:15:29

标签: c# asp.net image .net-2.0

嗨,我收到错误“

  

'System.IO.Stream'不包含'CopyTo'和no的定义   扩展方法'CopyTo'接受类型的第一个参数   可以找到'System.IO.Stream'(你是否缺少using指令   或汇编参考?)

”   我在我的项目中使用以下代码行。

Bitmap img;
 using (var ms = new MemoryStream())
 {
    fu.PostedFile.InputStream.CopyTo(ms);
    ms.Position = 0;
    img = new System.Drawing.Bitmap(ms);
 }

为什么我收到此错误?怎么解决这个问题?
请帮帮我......

3 个答案:

答案 0 :(得分:3)

Stream.CopyTo是在.NET 4中引入的。由于你的目标是.Net 2.0,它不可用。在内部,CopyTo主要是这样做(尽管有额外的错误处理),所以你可以使用这个方法。为方便起见,我把它作为一种扩展方法。

//it seems 81920 is the default size in CopyTo but this can be changed
public static void CopyTo(this Stream source, Stream destination, int bufferSize = 81920)
{
    byte[] array = new byte[bufferSize];
    int count;
    while ((count = source.Read(array, 0, array.Length)) != 0)
    {
       destination.Write(array, 0, count);
    }
}

所以你可以简单地做

using (var ms = new MemoryStream())
{       
    fu.PostedFile.InputStream.CopyTo(ms);
    ms.Position = 0;
    img = new System.Drawing.Bitmap(ms);
}

答案 1 :(得分:0)

正如Caboosetp所说,我认为正确的方法(我从其他地方得到的,可能是在SO上)是:

public static void CopyTo(Stream input, Stream outputStream)
    {
        byte[] buffer = new byte[16 * 1024]; // Fairly arbitrary size
        int bytesRead;
        while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
        {
            outputStream.Write(buffer, 0, bytesRead);
        }
    }

with:

Stream stream = MyService.Download(("1231"));
using (Stream s = File.Create(file_path))
{
    CopyTo(stream, s);
}

答案 2 :(得分:-1)