2010-09-14 16 views
13

_data es un byte [] matriz de datos adjuntos.El archivo adjunto de correo electrónico del MemoryStream viene vacío

cuando estoy haciendo esto:

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

Adjunto viene vacía. En realidad, outlook muestra el tamaño del archivo, pero es incorrecto.

Bueno, pensé que había un problema en mi _data. Entonces decidí probar este enfoque:

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

Y eso funciona. ¿Qué pasa con el primero?

Respuesta

34

Con la primera forma, usted no está "rebobinar" la corriente:

ms.Position = 0; 

Así que estaba tratando de leer desde el extremo de la corriente, donde no había ningún dato .

Una forma más sencilla de crear la MemoryStream es que sólo tiene que utilizar el constructor sin embargo:

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

no está ayudando, lo he intentado – Agzam

+0

@Ike: Por favor, muestre el código donde lo ha intentado. –

+2

oh ... espera ... En realidad eso fue todo ... Estoy seguro de que lo intenté antes, y no funcionó. probablemente me había metido con algo más ... – Agzam

4

No utilice GetBuffer. Utilice ms.ToArray().

+0

problema en la primera parte no la segunda – Agzam

+1

@Ike: Aliostad estaba señalando que el segundo fragmento todavía no es realmente Correcto, es probable que tenga problemas. –

Cuestiones relacionadas