.NET ez 2011-11-28
SharpZipLib 官方網站下載:http://www.icsharpcode.net/OpenSource/SharpZipLib/ or SharpZipLib 0.86 壓縮檔案
Compress("C:\\ziproute", "C:\\ziproute.zip", 5);
// 傳入參數: 來源路徑, 目的壓縮檔名(.zip), 壓縮比( 0=僅儲存, 9=最高壓縮比 )
public static void Compress(string dir, string zipFileName, int level)
{
string[] filenames = Directory.GetFiles(dir);
byte[] buffer = new byte[4096];
using (ZipOutputStream s = new ZipOutputStream(File.Create(zipFileName)))
{
// 設定壓縮比
s.SetLevel(level);
// 逐一將資料夾內的檔案抓出來壓縮,並寫入至目的檔(.ZIP)
foreach (string filename in filenames)
{
ZipEntry entry = new ZipEntry(filename);
s.PutNextEntry(entry);
using (FileStream fs = File.OpenRead(filename))
StreamUtils.Copy(fs, s, buffer);
}
}
}解壓縮檔案
Uncompress("C:\\ziproute.zip", "C:\\ziproute");
// 解壓縮檔案,傳入參數: 來源壓縮檔, 解壓縮後的目的路徑
public static void Uncompress(string zipFileName, string targetPath)
{
using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFileName)))
{
// 若目的路徑不存在,則先建立路徑
DirectoryInfo di = new DirectoryInfo(targetPath);
if (!di.Exists)
di.Create();
ZipEntry theEntry;
// 逐一取出壓縮檔內的檔案(解壓縮)
while ((theEntry = s.GetNextEntry()) != null)
{
int size = 2048;
byte[] data = new byte[2048];
Console.WriteLine("正在解壓縮: " + GetBasename(theEntry.Name));
// 寫入檔案
using (FileStream fs = new FileStream(di.FullName + "\\" + GetBasename(theEntry.Name), FileMode.Create))
{
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
fs.Write(data, 0, size);
else
break;
}
}
}
}
}
// 取得檔名(去除路徑)
public static string GetBasename(string fullName)
{
string result;
int lastBackSlash = fullName.LastIndexOf("\\");
result = fullName.Substring(lastBackSlash + 1);"
return result;
}列舉壓縮檔內所有的檔案
List("C:\\ziproute.zip");
// 傳入參數: 來源壓縮檔檔名
public static void List(string zipFile)
{
if (File.Exists(zipFile))
{
ZipFile zip = new ZipFile(zipFile);
foreach (ZipEntry entry in zip)
{
if (entry.IsFile)
Console.WriteLine(entry.Name);
}
}
else
Console.WriteLine(zipFile + " 不存在");
}ZipTool
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
namespace ZipTool
{
public class ZipTool
{
/// <summary>
/// 壓縮整個資料夾
/// </summary>
private static void ZipDir(string SourceDir, string TargetFile, string Password, bool BackupOldFile)
{
FastZip oZipDir = new FastZip();
try
{
if (!Directory.Exists(SourceDir))
{
throw new Exception("資料夾不存在!");
}
if (BackupOldFile == true)
{
//判斷要產生的ZIP檔案是否存在
if (File.Exists(TargetFile) == true)
{
//原本的檔案存在,把他ReName
File.Copy(TargetFile, TargetFile + "-" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".back");
File.Delete(TargetFile);
}
}
if (string.IsNullOrEmpty(Password))
oZipDir.Password = Password;
oZipDir.CreateZip(TargetFile, SourceDir, true, "");
}
catch
{
throw;
}
}
/// <summary>
/// 壓縮整個資料夾
/// </summary>
public static void ZipDir(string SourceDir, string TargetFile, string Password)
{
ZipDir(SourceDir, TargetFile, Password, true);
}
/// <summary>
/// 壓縮整個資料夾
/// </summary>
public static void ZipDir(string SourceDir, string TargetFile)
{
ZipDir(SourceDir, TargetFile, "", true);
}
/// <summary>
/// 壓縮檔案
/// </summary>
private static void ZipFiles(string[] SourceFiles, string TargetFile, string Password, bool BackupOldFile)
{
try
{
if (SourceFiles == null || SourceFiles.Length <= 0)
{
throw new Exception("並未傳入檔案完整路徑");
}
for (int i = 0; i < SourceFiles.Length; i++)
{
if (File.Exists(SourceFiles[i]) == false)
{
throw new Exception("要壓縮的檔案【" + SourceFiles[i] + "】不存在");
}
}
if (BackupOldFile == true)
{
//判斷要產生的ZIP檔案是否存在
if (File.Exists(TargetFile) == true)
{
//原本的檔案存在,把他ReName
File.Copy(TargetFile, TargetFile + "-" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".back");
File.Delete(TargetFile);
}
}
ZipOutputStream zs = new ZipOutputStream(File.Create(TargetFile));
zs.SetLevel(9); //壓縮比
if (Password != "")
{
zs.Password = Password;
}
for (int i = 0; i < SourceFiles.Length; i++)
{
FileStream s = File.OpenRead(SourceFiles[i]);
byte[] buffer = new byte[s.Length];
s.Read(buffer, 0, buffer.Length);
ZipEntry Entry = new ZipEntry(Path.GetFileName(SourceFiles[i]));
Entry.DateTime = DateTime.Now;
Entry.Size = s.Length;
s.Close();
zs.PutNextEntry(Entry);
zs.Write(buffer, 0, buffer.Length);
}
zs.Finish();
zs.Close();
}
catch
{
throw;
}
}
/// <summary>
/// 壓縮檔案
/// </summary>
public static void ZipFiles(string[] SourceFiles, string TargetFile, string Password)
{
ZipFiles(SourceFiles, TargetFile, Password, true);
}
/// <summary>
/// 壓縮檔案
/// </summary>
public static void ZipFiles(string[] SourceFiles, string TargetFile)
{
ZipFiles(SourceFiles, TargetFile, "", true);
}
/// <summary>
/// 壓縮單一檔案
/// </summary>
public static void ZipFile(string SourceFile, string TargetFile, string Password, bool BackupOldFile)
{
ZipFiles(new string[] { SourceFile }, TargetFile, Password, BackupOldFile);
}
/// <summary>
/// 壓縮單一檔案
/// </summary>
public static void ZipFile(string SourceFile, string TargetFile, string Password)
{
ZipFile(SourceFile, TargetFile, Password, true);
}
/// <summary>
/// 壓縮單一檔案
/// </summary>
/// <returns>
public static void ZipFile(string SourceFile, string TargetFile)
{
ZipFile(SourceFile, TargetFile, "", true);
}
/// <summary>
/// 解壓縮
/// </summary>
private static void ExtractZip(string SourceFile, string TargetDir, string Password)
{
FastZip oZip = new FastZip();
try
{
//判斷ZIP檔案是否存在
if (File.Exists(SourceFile) == false)
{
throw new Exception("要解壓縮的檔案【" + SourceFile + "】不存在,無法執行");
}
if (Password != "")
{
oZip.Password = Password;
}
oZip.ExtractZip(SourceFile, TargetDir, "");
}
catch
{
throw;
}
}
/// <summary>
/// 解壓縮
/// </summary>
public static void ExtractZip(string SourceFile, string TargetDir)
{
ExtractZip(SourceFile, TargetDir, "");
}
}
}標籤: .NET
本文章網址:
https://www.ez2o.com/Blog/Post/csharp-SharpZipLib-sample-code
https://www.ez2o.com/Blog/Post/1
https://www.ez2o.com/Blog/Post/csharp-SharpZipLib-sample-code
https://www.ez2o.com/Blog/Post/1
