C#2.0实现加压解压(V1.0)

it2022-05-09  32

用.net2.0中的using System.IO.Compression;实现加压和解压的源码。关于.net2.0中的加压解压类:GZipStream类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。这种格式包括一个检测数据损坏的循环冗余校验值。此外还有另一个加压类DeflateStream;

程序界面:程序清单:

using  System; using  System.Collections.Generic; using  System.ComponentModel; using  System.Data; using  System.Drawing; using  System.Text; using  System.Windows.Forms; using  System.IO; using  System.IO.Compression; namespace  zipTest{     public  partial  class  Form1 : Form    {         public  Form1()        {            InitializeComponent();        }         /* 取消 */          private   void  button4_Click( object  sender, EventArgs e)        {             this .Close();        }         /* 确定 */          private   void  button3_Click( object  sender, EventArgs e)        {             bool  success  =   false // 默认失败              string  err  =   "" ;             try             {                 if  (r_compress.Checked  ==   true )                {                    success  =  GzipCompress(t_source.Text, t_dis.Text);                }                 if  (r_deCompress.Checked  ==   true )                {                    success  =  GzipDecompress(t_source.Text, t_dis.Text);                }            }             catch  (Exception ex)            {                err = ex.Message.ToString();            }             if  (success  ==   false )                MessageBox.Show( " 操作失败! "   +  err);             else                 MessageBox.Show( " 操作成功! " );        }         /* 选择源文件 */          private   void  button1_Click( object  sender, EventArgs e)        {             if  (openFileDialog1.ShowDialog()  ==  DialogResult.OK)            {                t_source.Text  =  openFileDialog1.FileName;            }        }         /* 选择目标路径 */          private   void  button2_Click( object  sender, EventArgs e)        {             if  (folderBrowserDialog1.ShowDialog()  ==  DialogResult.OK)            {                t_dis.Text  =  folderBrowserDialog1.SelectedPath;            }        }         /* 加压 */          public   bool  GzipCompress( string  sourceFile, string  disPath)        {             // 路径合法性检测              if  ( ! File.Exists(sourceFile))                 throw   new  FileNotFoundException();             if  ( ! Directory.Exists(disPath))                 throw   new  DirectoryNotFoundException();             if  ( ! disPath.EndsWith( " \\ " ))                disPath  +=   " \\ " ;             // 生成压缩后文件名              string  oldName  =  Path.GetFileNameWithoutExtension(sourceFile);             string  newName  =  oldName  +   " 压缩文件.gzip " ;             bool  result  =   true ; // 默认成功             FileStream fs1  =   null ;            FileStream fs2  =   null ;            GZipStream zips  = null ;             try             {                fs1  =   new  FileStream(sourceFile, FileMode.Open, FileAccess.Read);                fs2  =   new  FileStream(disPath  +  newName, FileMode.OpenOrCreate, FileAccess.Write);                zips  =   new  GZipStream(fs2, CompressionMode.Compress);                 byte [] tempb  =   new   byte [fs1.Length];                fs1.Read(tempb,  0 , ( int )fs1.Length);                  zips.Write(tempb,  0 , tempb.Length);            }             catch              {                result = false // 执行失败             }             finally             {                 if  (zips  !=   null )                    zips.Close();                 if  (fs1  !=   null )                    fs1.Close();                 if  (fs2  !=   null )                    fs2.Close();            }             return  result;        }         /* 解压 */          public   bool  GzipDecompress( string  sourceFile, string  disPath)        {             // 路径合法性检测              if  ( ! File.Exists(sourceFile))                 throw   new  FileNotFoundException();             if  ( ! Directory.Exists(disPath))                 throw   new  DirectoryNotFoundException();             if  ( ! disPath.EndsWith( " \\ " ))                disPath  +=   " \\ " ;             // 生成解压后的文件名              string  outFile  =  disPath  +  Path.GetFileNameWithoutExtension(sourceFile);             bool  result  =   true ; // 默认成功             FileStream fs1  =   null ;            FileStream fs2  =   null ;            GZipStream zips  =   null ;             try             {                fs1  =   new  FileStream(sourceFile, FileMode.Open, FileAccess.Read);                fs2  =   new  FileStream(outFile, FileMode.OpenOrCreate, FileAccess.Write);                zips  =   new  GZipStream(fs1, CompressionMode.Decompress);                 byte [] tempb  =   new   byte [ 100 ];                 int  size  =   0 ;                 while  ( true )                {                    size  =  zips.Read(tempb,  0 100 );                     if  (size  >   0 )                        fs2.Write(tempb,  0 , size);                     else                          break ;                }            }             catch             {                result  =   false // 执行失败             }             finally             {                 if  (zips  !=   null )                    zips.Close();                 if  (fs1  !=   null )                    fs1.Close();                 if  (fs2  !=   null )                    fs2.Close();            }             return  result;        }    }} 这个版本暂时存在一个问题:解压后的文件没有后缀名,需要自己加上。 下一个版本解决此问题。

转载于:https://www.cnblogs.com/tuyile006/archive/2007/04/30/733393.html

相关资源:数据结构—成绩单生成器

最新回复(0)