小第现在做了个收发邮件的windows服务,并且有个exe程序去管理这个服务和显示接收到的邮件信息
收到的邮件附件是保存到这个服务器上的(就是服务所在的机器)
问题:
    我使用SharpZipLib.dll来压缩和解压这些附件,但是不会调用SharpZipLib.dll这里面的类或函数,哪位高手做过的能给小第写个参考吗?SharpZipLib.dll的例子我看了,但是还是有些搞不懂

解决方案 »

  1.   

    这里有个列子
    http://dev.csdn.net/article/63929.shtm
      

  2.   

    使用ICSharpCode.SharpZipLib组件来解压缩文件 
    在网上找到的代码: 
    ///   <summary> 
      ///   压缩文件 
      ///   </summary> using   System; 
    using   System.IO; using   ICSharpCode.SharpZipLib.Checksums; 
    using   ICSharpCode.SharpZipLib.Zip; 
    using   ICSharpCode.SharpZipLib.GZip; namespace   Compression 

      public   class   ZipClass 
      { 
      
        public   void   ZipFile(string   FileToZip,   string   ZipedFile   ,int   CompressionLevel,   int   BlockSize) 
        { 
          //如果文件没有找到,则报错 
          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   void   ZipFileMain(string[]   args) 
        { 
          string[]   filenames   =   Directory.GetFiles(args[0]); 
        
          Crc32   crc   =   new   Crc32(); 
          ZipOutputStream   s   =   new   ZipOutputStream(File.Create(args[1])); 
        
          s.SetLevel(6);   //   0   -   store   only   to   9   -   means   best   compression 
        
          foreach   (string   file   in   filenames)   
          { 
            //打开压缩文件 
            FileStream   fs   =   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> 
      ///   解压文件 
      ///   </summary> using   System; 
    using   System.Text; 
    using   System.Collections; 
    using   System.IO; 
    using   System.Diagnostics; 
    using   System.Runtime.Serialization.Formatters.Binary; 
    using   System.Data; using   ICSharpCode.SharpZipLib.BZip2; 
    using   ICSharpCode.SharpZipLib.Zip; 
    using   ICSharpCode.SharpZipLib.Zip.Compression; 
    using   ICSharpCode.SharpZipLib.Zip.Compression.Streams; 
    using   ICSharpCode.SharpZipLib.GZip; namespace   DeCompression 

      public   class   UnZipClass 
      {       
        public   void   UnZip(string[]   args) 
        { 
          ZipInputStream   s   =   new   ZipInputStream(File.OpenRead(args[0])); 
        
          ZipEntry   theEntry; 
          while   ((theEntry   =   s.GetNextEntry())   !=   null)   
          { 
          
                        string   directoryName   =   Path.GetDirectoryName(args[1]); 
            string   fileName             =   Path.GetFileName(theEntry.Name); 
          
            //生成解压目录 
            Directory.CreateDirectory(directoryName); 
          
            if   (fileName   !=   String.Empty)   
            {       
              //解压文件到指定的目录 
              FileStream   streamWriter   =   File.Create(args[1]+theEntry.Name); 
            
              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(); 
        } 
      } 
    }         有了压缩和解压缩的类以后,就要在窗体里调用了。怎么?是新手,不会调用?Ok,接着往下看如何在窗体里调用。         首先在窗体里放置两个命令按钮(不要告诉我你不会放啊~),然后编写以下源码 ///   <summary> 
      ///   调用源码 
      ///   </summary>             private   void   button2_Click_1(object   sender,   System.EventArgs   e) 
        { 
          string   []FileProperties=new   string[2]; 
          FileProperties[0]="C:\\unzipped\\";//待压缩文件目录 
          FileProperties[1]="C:\\zip\\a.zip";     //压缩后的目标文件 
          ZipClass   Zc=new   ZipClass(); 
          Zc.ZipFileMain(FileProperties); 
        }           private   void   button2_Click(object   sender,   System.EventArgs   e) 
        { 
          string   []FileProperties=new   string[2]; 
          FileProperties[0]="C:\\zip\\test.zip";//待解压的文件 
          FileProperties[1]="C:\\unzipped\\";//解压后放置的目标目录 
          UnZipClass   UnZc=new   UnZipClass(); 
          UnZc.UnZip(FileProperties); 
        } 调用压缩没问题! 
    但是解压缩的时候报错“不支持给定路径的格式”
      

  3.   

    Framework 2.0不是自己有一个压缩组件的么,为啥不用呢?GZipStream 类提供用于压缩和解压缩流的方法和属性。 
    命名空间: System.IO.Compression
    程序集: System(在 system.dll 中)
      

  4.   

    while ((entry=zis.GetNextEntry())!=null) 这里报错 楼上的美遇到过吗 
      

  5.   

    [color=#FF0000]  System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read);  [/color]这件报路径访问被拒绝的错误!!