c# - read - Crea un Stream sin tener un archivo físico para crear desde
guardar byte en archivo c# (3)
Necesito crear un archivo zip que contenga documentos que existen en el servidor. Estoy usando la clase .Net Package para hacerlo, y para crear un nuevo paquete (que es el archivo zip), tengo que tener una ruta a un archivo físico o una secuencia. Intento no crear un archivo real que sea el archivo zip, en su lugar solo crear una secuencia que existiría en la memoria o algo así.
Mi pregunta es cómo crear una nueva instancia de Stream (es decir, FileStream, MemoryStream, etc.) sin tener un archivo físico para crear instancias.
Hay un ejemplo de cómo hacer esto en la página de MSDN para MemoryStream :
using System;
using System.IO;
using System.Text;
class MemStream
{
static void Main()
{
int count;
byte[] byteArray;
char[] charArray;
UnicodeEncoding uniEncoding = new UnicodeEncoding();
// Create the data to write to the stream.
byte[] firstString = uniEncoding.GetBytes(
"Invalid file path characters are: ");
byte[] secondString = uniEncoding.GetBytes(
Path.GetInvalidPathChars());
using(MemoryStream memStream = new MemoryStream(100))
{
// Write the first string to the stream.
memStream.Write(firstString, 0 , firstString.Length);
// Write the second string to the stream, byte by byte.
count = 0;
while(count < secondString.Length)
{
memStream.WriteByte(secondString[count++]);
}
// Write the stream properties to the console.
Console.WriteLine(
"Capacity = {0}, Length = {1}, Position = {2}/n",
memStream.Capacity.ToString(),
memStream.Length.ToString(),
memStream.Position.ToString());
// Set the position to the beginning of the stream.
memStream.Seek(0, SeekOrigin.Begin);
// Read the first 20 bytes from the stream.
byteArray = new byte[memStream.Length];
count = memStream.Read(byteArray, 0, 20);
// Read the remaining bytes, byte by byte.
while(count < memStream.Length)
{
byteArray[count++] =
Convert.ToByte(memStream.ReadByte());
}
// Decode the byte array into a char array
// and write it to the console.
charArray = new char[uniEncoding.GetCharCount(
byteArray, 0, count)];
uniEncoding.GetDecoder().GetChars(
byteArray, 0, count, charArray, 0);
Console.WriteLine(charArray);
}
}
}
¿Es esto lo que estás buscando?
Puede crear una nueva secuencia y escribir en ella. No necesita un archivo para construir el objeto.
http://msdn.microsoft.com/en-us/library/system.io.memorystream.aspx
Método de escritura:
http://msdn.microsoft.com/en-us/library/system.io.memorystream.write.aspx
Constructores para Memory Stream:
http://msdn.microsoft.com/en-us/library/system.io.memorystream.memorystream.aspx
MemoryStream tiene varias sobrecargas de constructor , ninguna de las cuales requiere un archivo.