zoukankan      html  css  js  c++  java
  • 关于SharpZipLib的压缩与解压问题

    关于SharpZipLib的压缩与解压缩的实现代码,网络上有一堆,千遍一律,连注释也一模一样,一模一样的文章拷来拷去??

    我使用SharpZipLib.dll中遇到的问题是:利用SharpZipLib压缩后生成的*.rar文件,利用其可以正常解压,但如果使用文件右击压缩生成的*.RAR文件,在解压过程中出错,具体报错信息:Wrong Local header signature: 0x21726152 ;但*.zip文件可正常解压。

    具体压缩、解压代码实现参照网络上的代码,贴出概要代码:

    压缩文件
            public bool ZipFile(string dirPath, string zipFilePath, ref string error)
            {         
                
    try
                {
                    
    string[] filenames = Directory.GetFiles(dirPath);
                    
    using (ZipOutputStream zs = new ZipOutputStream(File.Create(zipFilePath)))
                    {
                        zs.SetLevel(
    9);
                        
    byte[] buffer = new byte[4096];

                        
    foreach (string file in filenames)
                        {
                            ZipEntry entry 
    = new ZipEntry(Path.GetFileName(file));
                            entry.DateTime 
    = DateTime.Now;
                            zs.PutNextEntry(entry);

                            
    using (FileStream fs = File.OpenRead(file))
                            {
                                
    int sourceBytes;
                                
    do
                                {
                                    sourceBytes 
    = fs.Read(buffer, 0, buffer.Length);
                                    zs.Write(buffer, 
    0, sourceBytes);
                                }
                                
    while (sourceBytes > 0);
                            }
                        }
                        zs.Finish();
                        zs.Flush();
                        zs.Close();
                    } 
                    
    return true;        
                }
                
    catch (Exception ex)
                {
                    
    return false;
                }
               
            }
     
    解压文件(出错)
      public bool DeCompress(string sourceFilePath, string destinationPath)
             {
                 
    try
                 {
                     
    using (ZipInputStream zs = new ZipInputStream(File.OpenRead(sourceFilePath)))
                     {
                         ZipEntry entry 
    = null;
                        
    //解压缩*.rar文件运行至此处出错:Wrong Local header signature: 0x21726152,解压*.zip文件不出错 
                         while ((entry = zs.GetNextEntry()) != null)
                         {
                             
    string directoryName = Path.GetDirectoryName(entry.Name);
                             
    string fileName = Path.GetFileName(entry.Name);
                           
                             
    if (!string.IsNullOrEmpty(fileName))
                             {
                                 
    using (FileStream streamWriter = File.Create(destinationPath + entry.Name))
                                 {
                                     
    int size = 2048;
                                     
    byte[] data = new byte[size];
                                     
    while (true)
                                     {
                                         size 
    = zs.Read(data, 0, data.Length);
                                         
    if (size > 0)
                                         {
                                             streamWriter.Write(data, 
    0, size);
                                         }
                                         
    else
                                         {
                                             
    break;
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
                 
    catch (System.Exception)
                 {
                     
    return false;
                 }
                 
    return true;
             }

    如果需解压*.rar的压缩文件在网络也可以找到相关的实现代码,概要代码:

    解压文件(正确)
    public bool DeCompressRAR(string sourceFilePath, string destinationPath)
             {
                 
    try
                 {
                     
    string SeverDir = @"D:\Program Files\WinRAR";//rar.exe的要目录
                     Process ProcessDecompression = new Process();
                     ProcessDecompression.StartInfo.FileName 
    = SeverDir + "\\rar.exe";

                     Directory.CreateDirectory(sourceFilePath);

                     ProcessDecompression.StartInfo.Arguments 
    = " X " + sourceFilePath + " " + destinationPath;

                     ProcessDecompression.Start();

                     
    while (!ProcessDecompression.HasExited)
                     {
                         
    //nothing to do here.
                     }
                     
    return true;
                 }
                 
    catch (System.Exception)
                 {
                     
    return false;
                 }
             }

    我本想利用FileUpload控件将上传的压缩文件解压后保存至相对应的目录并更新数据库文件目录,后发现一些较好的用于上传的开源软件:如NeatUpload,SWFUpload可以较方便的实现我的需求,遂没有过多纠缠于SharpZipLib,可能关于SharpZipLib的压缩与解压有其它用法,不能被我误导,以上代码是从网络上整合出来的,因为它太过于重复和散乱。

  • 相关阅读:
    Java基础学习(二)——对象
    Java基础学习(一)
    设置eclipse代码自动补全功能
    C# 之泛型详解(转)
    查找项目的代码行数(适用于VS)
    转: rdlc报表An error occurred during local report processing错误
    自己创建的Window服务,经常变为挂起状态,重启失败的处理
    C# 项目引用WebService,提示报错“在 ServiceModel 客户端配置部分中,找不到引用协定...”
    轉 @@identity与scope_identity()函数的区别
    JS window.onload事件的一些理解
  • 原文地址:https://www.cnblogs.com/spirit/p/1600065.html
Copyright © 2011-2022 走看看