c# - crear - ¿Copias MemoryStream a FileStream y guardas el archivo?
memorystream to pdf c# (2)
Debe restablecer la posición de la secuencia antes de copiar.
outStream.Position = 0;
outStream.CopyTo(fileStream);
outStream
el outStream
cuando outStream
el archivo usando imageFactory
. Esa función outStream
el outStream
. Mientras se completa el outStream
la posición se establece al final del área poblada. Eso es para que cuando continúe escribiendo bytes en el vapor, no anule los bytes existentes. Pero luego, para leerlo (para fines de copia), debe establecer la posición al inicio para que pueda comenzar a leer desde el principio.
No entiendo lo que estoy haciendo mal aquí. Genero un par de secuencias de memoria y en el modo de depuración veo que están llenas. Pero cuando trato de copiar MemoryStream
a FileStream
para guardar el archivo fileStream
no se rellena y el archivo es de 0 bytes de longitud (vacío).
Aquí está mi código
if (file.ContentLength > 0)
{
var bytes = ImageUploader.FilestreamToBytes(file); // bytes is populated
using (var inStream = new MemoryStream(bytes)) // inStream is populated
{
using (var outStream = new MemoryStream())
{
using (var imageFactory = new ImageFactory())
{
imageFactory.Load(inStream)
.Resize(new Size(320, 0))
.Format(ImageFormat.Jpeg)
.Quality(70)
.Save(outStream);
}
// outStream is populated here
var fileName = "test.jpg";
using (var fileStream = new FileStream(Server.MapPath("~/content/u/") + fileName, FileMode.CreateNew, FileAccess.ReadWrite))
{
outStream.CopyTo(fileStream); // fileStream is not populated
}
}
}
}
Si su objetivo es simplemente volcar la secuencia de la memoria a un archivo físico (por ejemplo, para ver los contenidos), se puede hacer en un movimiento:
memoryStream.Position = 0;
System.IO.File.WriteAllBytes(@"C://filename", memoryStream.ToArray());