文件解压缩公用类

using System;
using System.Collections.Generic;
using
System.Text;
using System;
using System.Collections.Generic;
using
System.Diagnostics;
using System.Configuration;
using System.IO;
using
System.IO.Compression;
using ICSharpCode.SharpZipLib.Zip;
using
Microsoft.Win32;

namespace
RST_ReadSDData.APP_Code
{
   public class
UnPackFile
    {
       
public UnPackFile()
       
{
           
//
            //TODO:
在此处添加构造函数逻辑
           
//
       
}

        #region  解压文件
包括.rar 和zip

        ///
<summary>
       
///解压文件
        ///
</summary>
        /// <param
name="fileFromUnZip">解压前的文件路径(绝对路径)</param>
       
/// <param
name="fileToUnZip">解压后的文件目录(绝对路径)</param>
       
public static void UnpackFileRarOrZip(string fileFromUnZip, string
fileToUnZip)
       
{
           
//获取压缩类型
           
string unType = fileFromUnZip.Substring(fileFromUnZip.LastIndexOf(".") + 1,
3).ToLower();
           
switch
(unType)
           
{
               
case
"rar":
                   
UnRar(fileFromUnZip,
fileToUnZip);
                   
break;
               
case
"zip":
                   
UnZip(fileFromUnZip,
fileToUnZip);
                   
break;
           
}
       
}

       
#endregion

       
#region  解压文件 .rar文件

        ///
<summary>
        ///
解压
        ///
</summary>
        /// <param
name="unRarPatch"></param>
       
/// <param
name="rarPatch"></param>
       
/// <param
name="rarName"></param>
       
///
<returns></returns>
       
public static void UnRar(string fileFromUnZip, string
fileToUnZip)
       
{
            string
the_rar;
           
RegistryKey
the_Reg;
           
object
the_Obj;
           
string
the_Info;

           
try
           
{
               
the_Reg =
Registry.LocalMachine.OpenSubKey(
                        
@"SOFTWARE\Microsoft\Windows\CurrentVersion\App
Paths\WinRAR.exe");
               
the_Obj =
the_Reg.GetValue("");
               
the_rar =
the_Obj.ToString();
               
the_Reg.Close();
               
//the_rar = the_rar.Substring(1, the_rar.Length -
7);

               
if (Directory.Exists(fileToUnZip) ==
false)
               
{
                   
Directory.CreateDirectory(fileToUnZip);
               
}
               
the_Info = "x " + Path.GetFileName(fileFromUnZip) + " " + fileToUnZip + "
-y";

               
ProcessStartInfo the_StartInfo = new
ProcessStartInfo();
               
the_StartInfo.FileName =
the_rar;
               
the_StartInfo.Arguments =
the_Info;
               
the_StartInfo.WindowStyle =
ProcessWindowStyle.Hidden;
               
the_StartInfo.WorkingDirectory =
Path.GetDirectoryName(fileFromUnZip);//获取压缩包路径

               
Process the_Process = new
Process();
               
the_Process.StartInfo =
the_StartInfo;
               
the_Process.Start();
               
the_Process.WaitForExit();
               
the_Process.Close();
           
}
            catch
(Exception
ex)
           
{
               
throw ex;
           
}
            //return
unRarPatch;
       
}

       
#endregion

       
#region  解压文件 .zip文件

        ///
<summary>
        ///
解压功能(解压压缩文件到指定目录)
        ///
</summary>
        /// <param
name="FileToUpZip">待解压的文件</param>
       
/// <param
name="ZipedFolder">指定解压目标目录</param>
       
public static void UnZip(string FileToUpZip, string
ZipedFolder)
       
{
            if
(!File.Exists(FileToUpZip))
           
{
               
return;
           
}

            if
(!Directory.Exists(ZipedFolder))
           
{
               
Directory.CreateDirectory(ZipedFolder);
           
}

           
ZipInputStream s =
null;
           
ZipEntry theEntry =
null;

           
string
fileName;
           
FileStream streamWriter =
null;
           
try
           
{
               
s = new
ZipInputStream(File.OpenRead(FileToUpZip));
               
while ((theEntry = s.GetNextEntry()) !=
null)
               
{

                   
if (theEntry.Name !=
String.Empty)
                   
{
                       
fileName = Path.Combine(ZipedFolder,
theEntry.Name);
                       
///判断文件路径是否是文件夹

                       
if (fileName.EndsWith("/") ||
fileName.EndsWith("\\"))
                       
{
                           
Directory.CreateDirectory(fileName);
                           
continue;
                       
}

                       
streamWriter =
File.Create(fileName);
                       
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;
                           
}
                       
}
                   
}
               
}
           
}
           
finally
           
{
               
if (streamWriter !=
null)
               
{
                   
streamWriter.Close();
                   
streamWriter =
null;
               
}
               
if (theEntry !=
null)
               
{
                   
theEntry =
null;
               
}
               
if (s !=
null)
               
{
                   
s.Close();
                   
s =
null;
               
}
               
GC.Collect();
               
GC.Collect(1);
           
}
       
}

       
#endregion
    }
}

时间: 2024-12-07 18:51:00

文件解压缩公用类的相关文章

自动化测试框架-----公用类

其中文件公用类如下: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import j

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2 新增解压缩工具类ZipHelper

在项目对文件进行解压缩是非常常用的功能,对文件进行压缩存储或传输可以节省流量与空间.压缩文件的格式与方法都比较多,比较常用的国际标准是zip格式.压缩与解压缩的方法也很多,在.NET 2.0开始,在System.IO.Compression中微软已经给我们提供了解压缩的方法GZipStream.对于GZipStream的使用以及优缺点网上已经有非常多的文章,本文主要讲的是利用三方开源组件ICSharpCode.SharpZipLib进行文件的解压缩. SharpZipLib地址:http://w

一个异步加载图片的公用类: EGOImageLoading

逛论坛的时候,发现偶尔还会有人在问怎么做图片的异步加载,很多回答都还是告知用原始的connection,收到数据NSData以后,再用UIImage initWithData生成图片对象.对于刚开始接触iOS开发的人来说,我还是推荐用这种方式的.但是对于已经有一定iOS开发经验的人来说,我推荐你们用比较成熟的第三方公用类.为什么这么说呢,1) 首先图片异步加载属于一个公共的问题空间,这部分的代码,对于所有需要加载网络图片的项目,逻辑都是一样的,也就是我们应     该把这部分代码做成可重用的,或

ZIP解压缩工具类

import java.io.File; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Expand; import org.apache.tools.ant.taskdefs.Zip; import org.apache.tools.ant.types.FileSet; /** * ZIP解压缩工具类 */ public class Zipper { // ZIP解压缩时 public fin

ajax结合文件上传类进行多文件的单个上传

今天做项目的时候碰见一个问题:之前一个同事离职之前做了一个网站,有一个上传商品详细图片的功能,当时已经完成,但是由于后期程序的有更改以及更改的程序员的水平也是参差不齐,最后导致程序bug很多,由于当时用的是一个框架,最终也没找到说明文档,后来我就重新写了一个结合ajax上传文件的upload.classs.php虽然界面欠缺美观,但是通俗易懂好维护. //首先是页面. index.php <!DOCTYPE html> <html lang="en"> <

Volley随笔之文件缓存DiskBasedCache类

Volley提供了一个基于文件的缓存类DiskBasedCache保存缓存数据.这个类完成缓存工作的原理大致如此,首先声明一个文件夹,文件夹下的文件与cacheKey一一对应,也就是说每一个文件时不同网络请求的返回数据.文件的格式是这样,文件头是数据结构CacheHeader,描述了缓存的信息,之后就是缓存数据. 下面是DiskBasedCache的代码,不得不说很优美! /*  * Copyright (C) 2011 The Android Open Source Project * * L

CFileDialog(文件夹对话框类)和CFontDialog(字体设置对话框类)的使用学习

CFileDialog(文件夹对话框类) 主要用于文件的保存,另存,打开,关闭等功能 功能“另存为”的实现: 1 void CTXTDlg::OnFileSaveas() 2 { 3 LPCTSTR szFilter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"; //过滤器设置,注意格式 4 CFileDialog fd(FALSE,"txt",NULL,OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST| /

C#读取XML文件的基类实现

刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node.Attribute(name)方法,因此,想到结合之前所做的XML操作,完成了一个能够读取XML文件的基类,便于以后的使用. PS:即使再老套的代码,目前也不敢进行优化,一是水平不行,二是不敢. 使用静态扩展类,扩展了几个经常使用的类型,能够方便数据的读写. 操作XML的类,可以直接继承BaseL

文件中的类都不能进行设计,因此未能为该文件显示设计器 VS2008(Visual Studio 2008) x64

项目属性 运行平台x64 Form2 继承 Form1 , Form2 设计器 报错 64位dll  无法加载 DLL 找不到指定的模块 原因Vs2008(Visual Studio 2008)默认 没安装64编译器 安装参照:<http://blog.csdn.net/clever101/article/details/8844314> 安装sp1补丁会报这个, 安装目录:D:\Program Files (x86)\Microsoft Visual Studio 9.0\Microsoft