压缩和解压缩

转载 2007年10月14日 15:19:00
/// <summary>
    
/// ZipClass 的摘要说明。
    
/// </summary>
    
/// <summary>
    
/// 压缩文件
    
/// </summary>

    public class ZipClass
    
{
        
public  static void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize,string password)
        
{
            
//如果文件没有找到,则报错
            if (! System.IO.File.Exists(FileToZip)) 
            
{
                
throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd");
            }

  
            System.IO.FileStream StreamToZip 
= new System.IO.FileStream(FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read);
            System.IO.FileStream ZipFile 
= System.IO.File.Create(ZipedFile);
            ZipOutputStream ZipStream 
= new ZipOutputStream(ZipFile);
            ZipEntry ZipEntry 
= new ZipEntry("ZippedFile");
            ZipStream.PutNextEntry(ZipEntry);
            ZipStream.SetLevel(CompressionLevel);
            
byte[] buffer = new byte[BlockSize];
            System.Int32 size 
=StreamToZip.Read(buffer,0,buffer.Length);
            ZipStream.Write(buffer,
0,size);
            
try 
            
{
                
while (size < StreamToZip.Length) 
                
{
                    
int sizeRead =StreamToZip.Read(buffer,0,buffer.Length);
                    ZipStream.Write(buffer,
0,sizeRead);
                    size 
+= sizeRead;
                }

            }
 
            
catch(System.Exception ex)
            
{
                
throw ex;
            }

            ZipStream.Finish();
            ZipStream.Close();
            StreamToZip.Close();
        }

 
        
public static void ZipFileMain(string[] args)
        
{
            
//string[] filenames = Directory.GetFiles(args[0]);
            string[] filenames = new string[]{args[0]};
  
            ICSharpCode.SharpZipLib.Checksums.Crc32 crc 
= new ICSharpCode.SharpZipLib.Checksums.Crc32();
            ZipOutputStream s 
= new ZipOutputStream( System.IO.File.Create(args[1]));
  
            s.SetLevel(
6); // 0 - store only to 9 - means best compression
  
            
foreach (string file in filenames) 
            
{
                
//打开压缩文件
                FileStream fs =  System.IO.File.OpenRead(file);   
                
byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 
0, buffer.Length);
                ZipEntry entry 
= new ZipEntry(file);
   
                entry.DateTime 
= DateTime.Now;
   
                
// set Size and the crc, because the information
                
// about the size and crc should be stored in the header
                
// if it is not set it is automatically written in the footer.
                
// (in this case size == crc == -1 in the header)
                
// Some ZIP programs have problems with zip files that don't store
                
// the size and crc in the header.
                entry.Size = fs.Length;
                fs.Close();
   
                crc.Reset();
                crc.Update(buffer);
   
                entry.Crc  
= crc.Value;
   
                s.PutNextEntry(entry);
   
                s.Write(buffer, 
0, buffer.Length);
   
            }
  
            s.Finish();
            s.Close();
        }

    }

 
/// <summary>
    
/// UnZipClass 的摘要说明。
    
/// </summary>

    public class UnZipClass
    
{
      
        
/// <summary>
        
/// 解压复杂目录
        
/// </summary>
        
/// <param name="args">包含要解压的文件名和要解压到的目录名数组</param>

        public void UnZip(string[] args)
        
{
            ZipInputStream s 
= new ZipInputStream(System.IO.File.OpenRead(args[0]));
            
try
            
{   
                
string directoryName = Path.GetDirectoryName(args[1]);
                
                
if(!Directory.Exists(directoryName))
                    Directory.CreateDirectory(directoryName);

                ZipEntry theEntry;

                
while ((theEntry = s.GetNextEntry()) != null
                
{
                    
string path = Path.Combine(directoryName, theEntry.Name);

                    
if(theEntry.IsDirectory)
                        Directory.CreateDirectory(path);

                    
string fileName = Path.GetFileName(theEntry.Name);
   
                    
if (fileName != String.Empty) 
                    
{   
                        
//解压文件到指定的目录
                        FileStream streamWriter =  System.IO.File.Create(path);
    
                        
int size = 2048;
                        
byte[] data = new byte[2048];
                        
while (true
                        
{
                            size 
= s.Read(data, 0, data.Length);
                            
if (size > 0
                            
{
                                streamWriter.Write(data, 
0, size);
                            }
 
                            
else 
                            
{
                                
break;
                            }

                        }

    
                        streamWriter.Close();
                    }

                }

            }

            
catch(Exception eu)
            
{
                
throw eu;
            }

            
finally
            
{
                s.Close();
            }


        }
//end UnZip

        
public static bool UnZipFile(string file, string dir)
        
{
            ZipInputStream s 
= null;

            
if!File.Exists(file))
                
throw new Exception(file + "不存在");

            
try
            
{
                
if (!Directory.Exists(dir))
                    Directory.CreateDirectory(dir);
                
string fileFullName = Path.Combine(dir,file);
                s 
= new ZipInputStream( System.IO.File.OpenRead( fileFullName ));

                ZipEntry theEntry;
                
while ((theEntry = s.GetNextEntry()) != null)
                
{
                    
//string directoryName = Path.GetDirectoryName(theEntry.Name);
                    string directoryName = dir;
                    
string fileName = Path.GetFileName(theEntry.Name);

                    
//                    if (directoryName != String.Empty)
                    
//                        Directory.CreateDirectory( Path.Combine(dir, directoryName));

                    
if (fileName != String.Empty)
                    
{
                        FileStream streamWriter 
=  System.IO.File.Create(   file.Replace("zip","xml") );
                        
int size = 2048;
                        
byte[] data = new byte[2048];
                        
while (true)
                        
{
                            size 
= s.Read(data, 0, data.Length);
                            
if (size > 0)
                            
{
                                streamWriter.Write(data, 
0, size);
                            }

                            
else
                            
{
                                
break;
                            }

                        }


                        streamWriter.Close();
                    }

                }

                s.Close();
                
return true;
            }

            
catch (Exception ex)
            
{
                
throw ex ;
            }

            
finally
            
{
                s.Close();    
            }

        }


    }
//end UnZipClass
http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx

linux常用的压缩与解压缩命令

1.gzip 压缩gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件]2.gunzip 解压这个命令与gzip的功能刚好相反,这个是解压。 用法 gunzip 选项...
  • u012702547
  • u012702547
  • 2015年07月05日 19:38
  • 1319

数据压缩 压缩字节数组和文件

 转自:http://www.cnblogs.com/yank/p/Compress.html 感谢博主分享 在进行文件存储或者数据传输时,为了节省空间流量,需要对数据或文件进行压缩。在这里我...
  • hutao1101175783
  • hutao1101175783
  • 2016年06月29日 16:33
  • 1193

tar命令 文件压缩与解压

tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在...
  • done58
  • done58
  • 2015年12月25日 17:03
  • 5856

LZW压缩(解压缩)算法详解及源码

from: http://blog.chinaunix.net/uid-23741326-id-3124208.html LZW压缩算法是Lempel-Ziv-Welch 3个人共同发明的,...
  • xiongbixb2
  • xiongbixb2
  • 2015年11月08日 11:38
  • 2233

我(webabcd)的文章索引

重新想象 Windows 8 Store Apps 系列文章 重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, P...
  • u013700340
  • u013700340
  • 2014年03月30日 20:00
  • 692

Java压缩和解压缩

public class ZipUtil { private static List list = new ArrayList(); public static void main(Strin...
  • mazhimazh
  • mazhimazh
  • 2014年09月01日 11:29
  • 924

webservice大数据量传输时的压缩和解压缩

当访问WebSerivice时,如果数据量很大,传输数据时就会很慢。为了提高速度,我们就会想到对数据进行压缩。首先我们来分析一下。         当在webserice中传输数据时,一般都采用Da...
  • fox123871
  • fox123871
  • 2013年05月17日 11:19
  • 675

压缩和解压缩

以zip和unzip处理.zip文件  1.zip命令的基本使用方法 zip file.zip *: zip后接压缩后的文件名,在它的后面输入要压缩的文件即可。 2.压缩后,自动删除原文件  zip ...
  • u012459917
  • u012459917
  • 2014年02月17日 19:41
  • 409

压缩和解压缩

现在很的app都有备份功能,备份的时候
  • Dylan_null
  • Dylan_null
  • 2014年11月18日 22:07
  • 282

C# 压缩和解压缩

话不多说,直接上代码,最后有重要说明!!!哦对了,用的s 压缩:
  • yy910308
  • yy910308
  • 2014年09月18日 09:10
  • 415
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:压缩和解压缩
举报原因:
原因补充:

(最多只允许输入30个字)