2013-06-30 6 views
1

Salut, je reçois l'erreur "System.IO.Stream ne contient pas la définition pour CopyTo()

« System.IO.Stream » ne contient pas une définition pour « CopyTo » et aucune méthode d'extension « CopyTo » accepter un premier argument de type « System.IO.Stream » n'a pu être trouvée (vous manque une directive à l'aide ou une référence d'assemblage?)

" J'utilise suivant les lignes de code dans mon projet.

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

Pourquoi cette erreur se produit-elle? Comment résoudre ceci?
S'il vous plaît, aidez-moi ...

Répondre

2

Stream.CopyTo a été introduit dans .NET 4. Puisque vous ciblez .Net 2.0, il n'est pas disponible. En interne, CopyTo le fait principalement (bien qu'il y ait une gestion d'erreur supplémentaire), donc vous pouvez simplement utiliser cette méthode. J'en ai fait une méthode d'extension pour plus de commodité.

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

Ainsi, vous pouvez tout simplement faire

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

Votre fonction d'extension ne semble pas faire quoi il prétend faire. Il semble lire et écrire depuis la destination. – Caboosetp

0

Comme Caboosetp mentionné, je pense que la bonne méthode, (que je suis d'ailleurs, probablement SO) est la suivante:

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

avec:

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