pièce jointe du MemoryStream est vide
-
02-10-2019 - |
Question
_data est un tableau byte [] des données de pièce jointe.
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 montre de perspectives La taille des fichiers, mais il est incorrect.
Eh bien, je pense qu'il ya un problème dans mon _data. 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?
La solution
Avec la première forme, vous n'êtes pas « rembobiner » le flux:
ms.Position = 0;
Il a essayé de lire la end 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));
Autres conseils
Ne pas utiliser GetBuffer. Utilisez ms.ToArray().
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow