创建流而无需创建物理文件

问题描述 投票:0回答:3

我需要创建一个包含服务器上存在的文档的 zip 文件。我使用 .Net Package 类来执行此操作,并创建一个新的 Package(即 zip 文件),我必须具有物理文件或流的路径。我试图不创建一个实际的 zip 文件,而是创建一个存在于内存或其他东西中的流。

我的问题是如何在没有物理文件来实例化的情况下实例化一个新的流(即 FileStream、MemoryStream 等)。

c# stream package system.io.packaging
3个回答
33
投票

MemoryStream有几个构造函数重载,其中都不需要文件。


11
投票

MemoryStream 的 MSDN 页面上有一个如何执行此操作的示例:

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); } } }

这是您要找的吗?


3
投票
您可以创建一个新流并向其写入。 您不需要文件来构造对象。

http://msdn.microsoft.com/en-us/library/system.io.memorystream.aspx

书写方法:

http://msdn.microsoft.com/en-us/library/system.io.memorystream.write.aspx

内存流的构造函数:

http://msdn.microsoft.com/en-us/library/system.io.memorystream.memorystream.aspx

© www.soinside.com 2019 - 2024. All rights reserved.