Guardar y cargar MemoryStream hacia/desde un archivo

Resuelto Mahdi Ghiasi asked hace 12 años • 9 respuestas

Estoy serializando una estructura en MemoryStreamy quiero guardar y cargar la estructura serializada.

Entonces, ¿cómo guardar un archivo MemoryStreamen un archivo y también volver a cargarlo desde el archivo?

Mahdi Ghiasi avatar Dec 24 '11 17:12 Mahdi Ghiasi
Aceptado

Puede utilizar métodos MemoryStream.WriteToo Stream.CopyTo(compatibles con la versión 4.5.2, 4.5.1, 4.5, 4) del marco para escribir el contenido de un flujo de memoria en otro flujo.

memoryStream.WriteTo(fileStream);

Actualizar:

fileStream.CopyTo(memoryStream);
memoryStream.CopyTo(fileStream);
KV Prajapati avatar Dec 24 '2011 11:12 KV Prajapati

Suponiendo que el nombre de MemoryStream sea ms.

Este código escribe MemoryStream en un archivo:

using (FileStream file = new FileStream("file.bin", FileMode.Create, System.IO.FileAccess.Write)) {
   byte[] bytes = new byte[ms.Length];
   ms.Read(bytes, 0, (int)ms.Length);
   file.Write(bytes, 0, bytes.Length);
   ms.Close();
}

y esto lee un archivo en un MemoryStream:

using (MemoryStream ms = new MemoryStream())
using (FileStream file = new FileStream("file.bin", FileMode.Open, FileAccess.Read)) {
   byte[] bytes = new byte[file.Length];
   file.Read(bytes, 0, (int)file.Length);
   ms.Write(bytes, 0, (int)file.Length);
}

En .Net Framework 4+, simplemente puede copiar FileStream a MemoryStream y revertirlo de manera tan simple como esto:

MemoryStream ms = new MemoryStream();
using (FileStream file = new FileStream("file.bin", FileMode.Open, FileAccess.Read))
    file.CopyTo(ms);

Y al revés (MemoryStream a FileStream):

using (FileStream file = new FileStream("file.bin", FileMode.Create, System.IO.FileAccess.Write))
    ms.CopyTo(file);
Ashkan Mobayen Khiabani avatar Dec 24 '2011 11:12 Ashkan Mobayen Khiabani