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
}
}
原文地址:http://www.cnblogs.com/haofaner/p/3767788.html