2010-04-12 10 views
17

Potrzebuję utworzyć plik zip zawierający dokumenty, które istnieją na serwerze. Używam klasy pakietu .Net, aby to zrobić, i aby utworzyć nowy pakiet (który jest plikiem zip), muszę mieć ścieżkę do fizycznego pliku lub strumienia. Próbuję nie tworzyć rzeczywistego pliku, który byłby plikiem zip, zamiast tego po prostu utworzyć strumień, który będzie istnieć w pamięci lub coś takiego.Utwórz strumień bez fizycznego pliku do utworzenia z

Moje pytanie brzmi: jak utworzyć instancję nowego strumienia (np. FileStream, MemoryStream itp.) Bez fizycznego pliku, z którego można utworzyć instancję.

Odpowiedz

7

Jest przykładem, jak to zrobić na MSDN page for 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); 
     } 
    } 
} 

Czy tego właśnie szukasz?

Powiązane problemy