我在使用ICSharpCode.SharpZipLib进行目录压缩后,再解压缩是提示这个错误
我在使用ICSharpCode.SharpZipLib进行目录压缩后,再解压缩是提示这个错误:
Size mismatch: 4294967295;126976 <-> 70202;126976
是在执行这句时: size = s.Read(data, 0, data.Length);//读入一个压缩块
报的错误。
我的源代码如下
//压缩
    ///  
         /// 递归压缩文件夹方法
          private static bool ZipFileDictory(string FolderToZip, ZipOutputStream s, string ParentFolderName)
         {
             bool res = true;
             string[] folders, filenames;
             ZipEntry entry = null;
             FileStream fs = null;
             Crc32 crc = new Crc32();
             try
             {//创建当前文件夹
                 entry = new ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip) + "/")); //加上 “/” 才会当成是文件夹创建
                 s.PutNextEntry(entry);
                 s.Flush();
                 //先压缩文件,再递归压缩文件夹  
                 filenames = Directory.GetFiles(FolderToZip);
                 foreach (string file in filenames)
                 {
                     //打开压缩文件
                     fs = File.OpenRead(file);
                     byte[] buffer = new byte[fs.Length];
                     fs.Read(buffer, 0, buffer.Length);
                     entry = new ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip) + "/" + Path.GetFileName(file)));
                     entry.DateTime = DateTime.Now;
                     entry.Size = fs.Length;
                     fs.Close();
                     crc.Reset();
                     crc.Update(buffer);
                     entry.Crc = crc.Value;
                     s.PutNextEntry(entry);
                     s.Write(buffer, 0, buffer.Length);
                 }
             }
             catch
             {
                 res = false;
             }
             finally
             {
                 if (fs != null)
                 {
                     fs.Close();
                     fs = null;
                 }
                 if (entry != null)
                 {
                     entry = null;
                 }
                 GC.Collect();
                 GC.Collect(1);
             }
             folders = Directory.GetDirectories(FolderToZip);
             foreach (string folder in folders)
             {
                 if (!ZipFileDictory(folder, s, Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip))))
                 {
                     return false;
                 }
             }
             return res;
         }
         ///  
         /// 压缩目录
         ///  
         /// 待压缩的文件夹,全路径格式
         /// 压缩后的文件名,全路径格式
         ///  
         private static bool ZipFileDictory(string FolderToZip, string ZipedFile, String Password)
         {
             bool res;
             if (!Directory.Exists(FolderToZip))
             {
                 return false;
             }
             ZipOutputStream s = new ZipOutputStream(File.Create(ZipedFile));
             s.SetLevel(9);
             s.Password = Password;
             res = ZipFileDictory(FolderToZip, s, "");
             s.Finish();