dongxiaoling1029

导航

【转】GZipStream 压缩多个文件

 因为要求的压缩和解压非常简单,只有一级目录,而且文件很小,就没有使用SharpZipLib而是自己用.Net 2.0中的GZipStream类写了个简单的。将保存每个文件内容的byte数组和文件名的一个类型的示例放入arraylist里,再对其序列化,压缩序列化的流并保存为压缩包。其实对于多级目录在压缩时对其文件进行递归并在解压时根据文件名称和路径重新构建文件目录就也可以实现了。

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天using System;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
using System.Text;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
using System.Runtime.Serialization;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
using System.Runtime.Serialization.Formatters.Binary;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
using System.Collections;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
using System.IO;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
using System.IO.Compression;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
namespace GreatCHN.GZipCompression
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天    
public class GZipCompress
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天   
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天       
/// <summary>
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
/// 对目标文件夹进行压缩,将压缩结果保存为指定文件
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
/// </summary>
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
/// <param name="dirPath">目标文件夹</param>
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
/// <param name="fileName">压缩文件</param>

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        public static void Compress(string dirPath, string fileName)
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天     
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            ArrayList list 
= new ArrayList();
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
foreach (string f in Directory.GetFiles(dirPath))
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天           
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
byte[] destBuffer = File.ReadAllBytes(f);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                SerializeFileInfo sfi 
= new SerializeFileInfo(f, destBuffer);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                list.Add(sfi);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            IFormatter formatter 
= new BinaryFormatter();
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
using (Stream s = new MemoryStream())
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天           
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                formatter.Serialize(s, list);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                s.Position 
= 0;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                CreateCompressFile(s, fileName);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
/// <summary>
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
/// 对目标压缩文件解压缩,将内容解压缩到指定文件夹
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
/// </summary>
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
/// <param name="fileName">压缩文件</param>
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
/// <param name="dirPath">解压缩目录</param>

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        public static void DeCompress(string fileName, string dirPath)
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天       
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
using (Stream source = File.OpenRead(fileName))
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天           
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
using (Stream destination = new MemoryStream())
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天               
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    
using (GZipStream input = new GZipStream(source, CompressionMode.Decompress, true))
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                        
byte[] bytes = new byte[4096];
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                        
int n;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                        
while ((n = input.Read(bytes, 0, bytes.Length)) != 0)
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                        
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                            destination.Write(bytes, 
0, n);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                        }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    destination.Flush();
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    destination.Position 
= 0;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    DeSerializeFiles(destination, dirPath);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
private static void DeSerializeFiles(Stream s, string dirPath)
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            BinaryFormatter b 
= new BinaryFormatter();
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            ArrayList list 
= (ArrayList)b.Deserialize(s);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
foreach (SerializeFileInfo f in list)
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
string newName = dirPath + Path.GetFileName(f.FileName);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
using (FileStream fs = new FileStream(newName, FileMode.Create, FileAccess.Write))
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    fs.Write(f.FileBuffer, 
0, f.FileBuffer.Length);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    fs.Close();
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
private static void CreateCompressFile(Stream source, string destinationName)
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
using (Stream destination = new FileStream(destinationName, FileMode.Create, FileAccess.Write))
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
using (GZipStream output = new GZipStream(destination, CompressionMode.Compress))
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    
byte[] bytes = new byte[4096];
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    
int n;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    
while ((n = source.Read(bytes, 0, bytes.Length)) != 0)
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                        output.Write(bytes, 
0, n);
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        [Serializable]
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
class SerializeFileInfo
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
public SerializeFileInfo(string name, byte[] buffer)
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                fileName 
= name;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                fileBuffer 
= buffer;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
string fileName;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
public string FileName
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
get
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    
return fileName;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
byte[] fileBuffer;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
public byte[] FileBuffer
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
get
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                
{
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                    
return fileBuffer;
使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天                }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天            }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天        }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天    }

使用GZipStream类压缩和解压文件夹 - 一个半天 - 一个半天}


      在System.IO.Compress命名空间下还有一个DeflateStream类,它使用Deflate 算法来进行压缩和解压,它和GZipStream的工作方式是一样的。

posted on 2011-07-12 21:26  dongxiaoling1029  阅读(688)  评论(0编辑  收藏  举报