Guardar y cargar MemoryStream hacia/desde un archivo
Estoy serializando una estructura en MemoryStream
y quiero guardar y cargar la estructura serializada.
Entonces, ¿cómo guardar un archivo MemoryStream
en un archivo y también volver a cargarlo desde el archivo?
Aceptado
Puede utilizar métodos MemoryStream.WriteTo
o 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);
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);