关于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的压缩与解压有其它用法,不能被我误导,以上代码是从网络上整合出来的,因为它太过于重复和散乱。

你可能感兴趣的:(zip)