我用FastZip压缩,结果生成的文件用Winrar不能解压? 这是怎么回事,还有其他方法压缩吗?谢谢~

解决方案 »

  1.   

    你需要先到网上下载ICSharpCode.SharpZipLib.dll
    然后引用用下面的方法实现压缩和解压缩using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using ICSharpCode.SharpZipLib.Zip;namespace NetStars
    {
        public class ZipFiles
        {        /// <summary>
            /// 创建一个压缩文件 
            /// </summary>
            /// <param name="zipFilename">压缩后的文件名</param>
            /// <param name="sourceDirectory">待压缩文件的所在目录</param>
            public static void PackFiles(string zipFilename, string sourceDirectory)
            {
                FastZip fz = new FastZip();
                fz.CreateEmptyDirectories = true;
                fz.CreateZip(zipFilename, @sourceDirectory, true, "");
                fz = null;
            }        /// <summary>
            /// 解压缩文件
            /// </summary>
            /// <param name="zipFile">待解压缩的文件</param>
            /// <param name="directory">解压缩后文件存放的目录</param>
            public static bool UnpackFiles(string zipFile, string directory)
            {
                if (!Directory.Exists(directory))
                    Directory.CreateDirectory(directory);            ZipInputStream zis = new ZipInputStream(File.OpenRead(zipFile));
                ZipEntry theEntry = null;
                while ((theEntry = zis.GetNextEntry()) != null)
                {
                    string directoryName = Path.GetDirectoryName(theEntry.Name);
                    string fileName = Path.GetFileName(theEntry.Name);
                    if (directoryName != string.Empty)
                        Directory.CreateDirectory(directory + directoryName);                if (fileName != string.Empty)
                    {
                        FileStream streamWriter = File.Create(Path.Combine(directory, theEntry.Name));
                        int size = 2048;
                        byte[] data = new byte[size];
                        while (true)
                        {
                            size = zis.Read(data, 0, data.Length);
                            if (size > 0)
                                streamWriter.Write(data, 0, size);
                            else
                                break;
                        }                    streamWriter.Close();
                    }
                }            zis.Close();
                return true;
            }    }
    }
      

  2.   

    你到http://ndoc.cn/aspxzip看看,这是个asp.net写的压缩程序,可以压缩/解压zip文件,解压rar文件
      

  3.   

    对了忘了说了,aspxzip 也是使用ICSharpCode.SharpZipLib这个组件,只不过把一些不怎么常用的压缩算法去掉了,只剩下了zip算法还有,是开源的
      

  4.   

    1楼的方法还是不行~
    生成的压缩文件不能用winrar打开,郁闷
      

  5.   

    我都用了,没问题,可能是压缩后的文件仍然被进程占用,所以不能打开,另外winrar的版本问题是否也应该考虑
      

  6.   

    也可能是SharpZipLib版本的问题