2010-09-14 3 views
13

_data est un tableau d'octets [] de données de pièce jointe.La pièce jointe d'un e-mail à partir de MemoryStream est vide

Quand je fais ceci:

var ms = new MemoryStream(_data.Length); 
ms.Write(_data,0,_data.Length); 
mailMessage.Attachments.Add(new Attachment(ms, attachment.Name)); 

pièce jointe est vide. En fait, Outlook montre la taille du fichier mais c'est incorrect.

Eh bien, je pensais qu'il y avait un problème dans mes données. Ensuite, j'ai décidé d'essayer cette approche:

var ms = new MemoryStream(_data.Length); 
ms.Write(_data,0,_data.Length); 
fs = new FileStream(@"c:\Temp\"+attachment.Name,FileMode.CreateNew); 
fs.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); 
fs.Flush(); 
fs.Close(); 
mailMessage.Attachments.Add(new Attachment(@"c:\Temp\" + attachment.Name)); 

Et cela fonctionne. Quel est le problème avec le premier?

Répondre

34

, vous n'êtes pas « rembobiner » le flux:

ms.Position = 0; 

Il essayait de lire la fin du cours d'eau, où il n'y avait pas de données .

Une façon plus simple de créer MemoryStream est d'utiliser simplement le constructeur si:

var ms = new MemoryStream(_data); 
mailMessage.Attachments.Add(new Attachment(ms, attachment.Name)); 
problème
+0

ça n'aide pas, j'ai essayé ça – Agzam

+0

@Ike: S'il vous plaît montrer le code où vous avez essayé cela. –

+2

oh .. attends ... En fait c'était ça ... Je suis sûr que j'ai déjà essayé ça, et ça n'a pas marché. probablement je me suis trompé avec autre chose ... – Agzam

4

N'utilisez pas GetBuffer. Utilisation avec la première forme ms.ToArray().

+0

dans la première partie non le second – Agzam

+1

@Ike: Aliostad pointait que votre deuxième extrait est toujours pas vraiment droite - il est susceptible d'avoir des problèmes. –

Questions connexes