2013-06-30 17 views
1

您好我正在錯誤「System.IO.Stream不包含定義CopyTo從()

‘System.IO.Stream’不包含‘CopyTo從’無 擴展方法的定義「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); 
} 

爲什麼我得到這個錯誤?如何解決這個問題?
請幫助我...

回答

2

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

您的擴展功能似乎沒有做什麼它聲稱要這樣做。它似乎是從目的地閱讀和寫作。 – Caboosetp

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

與:

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