C#中好像有关于压缩的库,但是有很多限制,并不能很好的进行自定义压缩。

网上也有一些方法,有使用SharpZipLib的。也有C#使用J#类库中的Zip类压缩文件和数据。各有优缺点吧。

这里使用SevenZipSharp来进行压缩,用起来也比较方便。SevenZipSharp是codeplex的开源项目,其中使用了7-zip的library。

使用的时候需要7z.dll和SevenZipSharp.dll,其中前一个不能直接添加引用,可以把它复制到项目里或者在程序里添加它的路径,像下面这样:

    public class Util
    {
        static Util()
        {
            SevenZipCompressor.SetLibraryPath(@"d:\My Documents\7z.dll");
        }

        public static void CompressFiles() 
        {
            SevenZipCompressor tmp = new SevenZipCompressor();
            tmp.ArchiveFormat = OutArchiveFormat.Zip;
            tmp.CompressFiles(@"D:\test.zip", @"D:\test.txt");
        }
    }

 

也可以使用CompressDirectory来压缩目录和CompressFileDictionary自由形式压缩,在codeplex里有文档的下载。现在最新的版本0.58中CompressFileDictionary会有Exception,这在0.36版本里就没有问题。但是0.36版本压缩空文件的时候也会出错。哎,纠结了……