C#实现加压解压(v2.1)

本文提供了一个使用.NET 2.0中的GZipStream类进行文件压缩和解压缩的示例程序。通过该程序,用户可以选择源文件及指定目标路径来执行压缩或解压缩操作。

用.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;
        }
    }
}




在前一版本的基础上改进了一些地方
把压缩文件名加进压缩后的文件中,解压还原成原文件而不是无尾文件

如果这个版本代码难解,可以先看看上一版本

界面:


代码清单:

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);
                
// 将加压前文件名保存到加压前的数组中
                
// 第一个字节保存文件名的长度,
                 byte [] exb  =  System.Text.Encoding.Unicode.GetBytes(Path.GetFileName(sourceFile));
                
byte [] lastb  =   new   byte [fs1.Length  +  exb.Length + 1 ];
                lastb[
0 =  Convert.ToByte(exb.Length);
                exb.CopyTo(lastb, 
1 );
                tempb.CopyTo(lastb, exb.Length
+ 1 );
                
// 压缩文件
                zips.Write(lastb,  0 , lastb.Length);
            }
            
catch (Exception ex)
            {
                result
= false // 执行失败
                 throw  ex;
            }
            
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 
+=   " \\ " ;
           
            
bool  result  =   true ; // 默认成功
            FileStream fs1  =   null ;
            FileStream fs2 
=   null ;
            MemoryStream ms 
=   null ;
            GZipStream zips 
=   null ;
            
try
            {
                fs1 
=   new  FileStream(sourceFile, FileMode.Open, FileAccess.Read);
                ms 
=   new  MemoryStream();
                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 )
                        ms.Write(tempb, 
0 , size);
                    
else
                        
break ;
                }
                
byte [] resultb  =   new   byte [ms.Length];
                
// 分析出加压前的文件名exName
                ms.Position  =   0 ;
                ms.Read(resultb, 
0 , ( int )ms.Length);
                
int  exlen = Convert.ToInt16(resultb[ 0 ]);
                
string  exName  =  System.Text.Encoding.Unicode.GetString(resultb, 1 ,exlen);
                
string  outFile  =  disPath  +  exName;
                fs2 
=   new  FileStream(outFile, FileMode.OpenOrCreate, FileAccess.Write);
                fs2.Write(resultb, exlen 
+   1 , resultb.Length  -  exlen  -   1 );
            }
            
catch (Exception ex)
            {
                result 
=   false // 执行失败
                 throw  ex;
            }
            
finally
            {
                
if  (zips  !=   null )
                    zips.Close();
                
if  (fs1  !=   null )
                    fs1.Close();
                
if  (fs2  !=   null )
                    fs2.Close();
                
if  (ms  !=   null )
                    ms.Close();
            }
            
return  result;
        }
    }
}

转载于:https://www.cnblogs.com/liufei88866/archive/2008/03/07/1094702.html

一、 内容概要 本资源提供了一个完整的“金属板材压弯成型”非线性仿真案例,基于ABAQUS/Explicit或Standard求解器完成。案例精确模拟了模具(凸模、凹模)与金属板材之间的接触、压合过程,直至板材发生塑性弯曲成型。 模型特点:包含完整的模具-工件装配体,定义了刚体约束、通用接触(或面面接触)及摩擦系数。 材料定义:金属板材采用弹塑性材料模型,定义了完整的屈服强度、塑性应变等真实应力-应变数据。 关键结果:提供了成型过程中的板材应力(Mises应力)、塑性应变(PE)、厚度变化​ 云图,以及模具受力(接触力)曲线,完整再现了压弯工艺的力学状态。 二、 适用人群 CAE工程师/工艺工程师:从事钣金冲压、模具设计、金属成型工艺分析与优化的专业人员。 高校师生:学习ABAQUS非线性分析、金属塑性成形理论,或从事相关课题研究的硕士/博士生。 结构设计工程师:需要评估钣金件可制造性(DFM)或预测成型回弹的设计人员。 三、 使用场景及目标 学习目标: 掌握在ABAQUS中设置金属塑性成形仿真的全流程,包括材料定义、复杂接触设置、边界条件与载荷步。 学习如何调试和分析大变形、非线性接触问题的收敛性技巧。 理解如何通过仿真预测成型缺陷(如减薄、破裂、回弹),并与理论或实验进行对比验证。 应用价值:本案例的建模方法与分析思路可直接应用于汽车覆盖件、电器外壳、结构件等钣金产品的冲压工艺开发与模具设计优化,减少试模成本。 四、 其他说明 资源包内包含参数化的INP文件、CAE模型文件、材料数据参考及一份简要的操作要点说明文档。INP文件便于用户直接修改关键参数(如压边力、摩擦系数、行程)进行自主研究。 建议使用ABAQUS 2022或更高版本打开。显式动力学分析(如用Explicit)对计算资源有一定要求。 本案例为教学与工程参考目的提供,用户可基于此框架进行拓展,应用于V型弯曲
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值