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

DylanJ 47 .net c# compression file decompression

有谁知道在C#中快速压缩或解压缩文件和文件夹的好方法?可能需要处理大文件.

Dave Anderso.. 27

.Net 2.0框架命名空间System.IO.Compression支持GZip和Deflate算法.以下是压缩和解压缩可从文件对象获取的字节流的两种方法.你可以替补多GZipStreamDefaultStream在下面的方法使用该算法.这仍然存在处理使用不同算法压缩的文件的问题.

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


Tom Grochowi.. 23

我一直使用SharpZip库.

这是一个链接


alumb.. 11

从.Net 1.1开始,唯一可用的方法是进入java库.
使用J#类库中的Zip类来使用C#压缩文件和数据
不确定在最近的版本中是否已更改.


用户甲.. 9

Tom指出,您可以使用SharpZip等第三方库.

另一种方式(没有第三方)是使用Windows Shell API.您需要在C#项目中设置对Microsoft Shell控件和自动化COM库的引用.Gerald Gibson有一个例子:

http://geraldgibson.net/dnn/Home/CZipFileCompression/tabid/148/Default.aspx

Internet Archive的死页副本


Amit Joki.. 8

我的回答是闭上你的眼睛并选择DotNetZip.它已经过大型社区的测试.


shsteimer.. 6

这在java中很容易实现,如上所述,您可以从C#进入java.util.zip库.有关参考,请参阅

java.util.zip javadocs
示例代码

我刚才用这个来做一个文件夹结构的深度(递归)拉链,但我不认为我曾经使用过解压缩.如果我很有动力,我可以将代码拉出来并稍后编辑到这里.


用户甲.. 6

GZipStream是一个非常好的实用工具.


Rok.. 5

另一个不错的选择也是DotNetZip.