压缩/解压缩文件夹和文件

khic 发布于 2018-02-03 .net 最后更新 2018-02-03 01:00 533 浏览

有谁知道一个很好的方式来压缩或解压缩在C#中的文件和文件夹快速?处理大文件可能是必要的。

已邀请:

daut

赞同来自:

从.net 1.1开始,唯一可用的方法是到达java库 Using the Zip Classes in the J# Class Libraries to Compress Files and Data with C#结果 不知道这是否在最近的版本已经改变。

ut_eos

赞同来自:

我一直使用SharpZip库。 Here's a link

funde

赞同来自:

正如汤姆指出的,你可以使用3rd-party library such as SharpZip。 另一种方式(不去第三方)是使用Windows Shell API。您需要在C#项目中设置对Microsoft Shell Controls和Automation COM库的引用。杰拉尔德·吉布森有一个例子: http://geraldgibson.net/dnn/Home/CZipFileCompression/tabid/148/Default.aspx Internet Archive's copy of the dead page

eet

赞同来自:

这在java中很容易实现,如上所述,您可以使用C#中的java.util.zip库。有关参考请参阅: java.util.zip javadocs 点击 sample code 我前一段时间用来做一个文件夹结构的深度(递归)压缩,但我不认为我曾经使用过这个解压缩。如果我很有动力,我可以把这些代码拿出来,稍后再编辑它。

sut

赞同来自:

.Net 2.0框架命名空间System.IO.Compression支持GZip和Deflate算法。以下是压缩和解压缩字节流的两种方法,您可以从文件对象中获取这些字节流。您可以在下面的方法中使用GZipStream替换DefaultStream以使用该算法。这仍然留下处理压缩不同算法的文件的问题。

public static byte[] Compress(byte[] data)
{
    MemoryStream output = new MemoryStream();
GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true);
    gzip.Write(data, 0, data.Length);
    gzip.Close();
return output.ToArray();
}
public static byte[] Decompress(byte[] data)
{
    MemoryStream input = new MemoryStream();
    input.Write(data, 0, data.Length);
    input.Position = 0;
GZipStream gzip = new GZipStream(input, CompressionMode.Decompress, true);
MemoryStream output = new MemoryStream();
byte[] buff = new byte[64];
    int read = -1;
read = gzip.Read(buff, 0, buff.Length);
while (read > 0)
    {
        output.Write(buff, 0, read);
        read = gzip.Read(buff, 0, buff.Length);
    }
gzip.Close();
return output.ToArray();
}

in_ut

赞同来自:

另一个好的选择是DotNetZip

aet

赞同来自:

GZipStream是一个非常好用的工具。

lvero

赞同来自:

我的回答会闭上你的眼睛,并选择DotNetZip。它已经被大型社区测试过了。