2010-09-14 12 views
13

_डेटा अटैचमेंट डेटा का बाइट [] सरणी है।मेमोरीस्ट्रीम से ईमेल अटैचमेंट खाली आता है

जब मैं यह कर रहा हूँ:

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

अनुलग्नक खाली आता है। असल में दृष्टिकोण फाइलसाइज दिखाता है लेकिन यह गलत है।

ठीक है, मैंने सोचा कि मेरे _डेटा में कोई समस्या है। फिर मैंने इस दृष्टिकोण को आजमाने का फैसला किया:

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

और यह काम करता है। पहले के साथ क्या गलत है?

उत्तर

34

प्रथम रूप के साथ, आप नहीं "रीवाइंड" कर रहे हैं धारा:

ms.Position = 0; 

तो यह अंत स्ट्रीम है, जहां कोई डेटा नहीं था की से पढ़ने के लिए कोशिश कर रहा था ।

MemoryStream बनाने का एक आसान तरीका सिर्फ निर्माता हालांकि उपयोग करने के लिए है: पहले भाग में

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

यह मदद नहीं कर रहा है, मैंने कोशिश की है कि – Agzam

+0

@Ike: कृपया वह कोड दिखाएं जहां आपने कोशिश की है। –

+2

ओह .. प्रतीक्षा करें ... असल में यह था ... मुझे यकीन है कि मैंने पहले कोशिश की थी, और यह काम नहीं किया। शायद मैं कुछ और के साथ गड़बड़ कर दिया था ... – Agzam

4

GetBuffer का उपयोग न करें। का प्रयोग करें ms.ToArray().

+0

समस्या नहीं दूसरा – Agzam

+1

@Ike: Aliostad उनका कहना था कि अपने दूसरे टुकड़ा अभी भी वास्तव में नहीं है सही - इसमें समस्याएं होने की संभावना है। –

संबंधित मुद्दे