我想在将文件物理保存到磁盘之前对其进行压缩。
我尝试使用压缩和解压缩方法(MSDN示例代码),但所有方法都要求文件已经物理存储在磁盘上。
Stream
打开,并使用压缩API(如GZipStream
)进行包装。using (var fileStream = File.Open(theFilePath, FileMode.OpenOrCreate) {
using (var stream = new GZipStream(fileStream, CompressionMode.Compress)) {
// Write to the `stream` here and the result will be compressed
}
}
GZipStream
和 CompressionMode.Decompress
选项。 - JaredPar你不仅可以使用GZipStream
类来压缩文件名,还可以压缩一个Stream
。
GZipStream类提供了用于压缩和解压缩流的方法和属性。
System.IO.MemoryStream ms = new System.IO.MemoryStream();
System.IO.Compression.GZipStream sw = new System.IO.Compression.GZipStream(ms,
System.IO.Compression.CompressionMode.Compress);
// now you can save the file to disc
使用 MemoryStream
和 GZipStream
。
文件是字节数组,因此您可以根据 http://www.dotnetperls.com/compress 尝试以下代码:
using System;
using System.IO;
using System.IO.Compression;
using System.Text;
namespace ConsoleApplication1
{
internal class Program
{
private static void Main(string[] args)
{
byte[] text = Encoding.ASCII.GetBytes(new string('X', 10000));
byte[] compress = Compress(text);
Console.WriteLine("Compressed");
foreach (var b in compress)
{
Console.WriteLine("{0} ", b);
}
Console.ReadKey();
}
public static byte[] Compress(byte[] raw)
{
using (var memory = new MemoryStream())
{
using (var gzip = new GZipStream(memory, CompressionMode.Compress, true))
{
gzip.Write(raw, 0, raw.Length);
}
return memory.ToArray();
}
}
}
}
你不能使用GZipStream类吗?它是基于流的,所以你不需要一个磁盘文件来使用这个类。
你想要压缩哪种类型的数据?