سؤال

_data هي مجموعة بايت [] من بيانات المرفق.

عندما أفعل هذا:

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

المرفق يأتي فارغ. في الواقع ، تعرض Outlook ملفات الملفات ولكنها غير صحيحة.

حسنًا ، اعتقدت أن هناك مشكلة في _data. ثم قررت تجربة هذا النهج:

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

وهذا يعمل. ما الخطأ في الأول؟

هل كانت مفيدة؟

المحلول

مع النموذج الأول ، أنت لا "إعادة ربط" الدفق:

ms.Position = 0;

لذلك كان يحاول القراءة من نهاية من الدفق ، حيث لم يكن هناك أي بيانات.

طريقة أبسط لإنشاء MemoryStream هي مجرد استخدام المُنشئ:

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

نصائح أخرى

لا تستخدم getBuffer. يستخدم ms.ToArray().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top