亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#實現的文件壓縮和解壓縮類

2020-01-24 02:06:51
字體:
來源:轉載
供稿:網友

本文實例講述了C#實現的文件壓縮和解壓縮類。分享給大家供大家參考。具體分析如下:

這個C#代碼包含了幾個類,封裝了文件壓縮和解壓縮常用的方法,包括直接通過代碼進行壓縮,也有調用winrar對文件進行壓縮的

using System;using System.IO;using System.Diagnostics;using Microsoft.Win32;using ICSharpCode.SharpZipLib.Checksums;using ICSharpCode.SharpZipLib.Zip;///壓縮、解壓縮類namespace DotNet.Utilities{  public class SharpZip  {    public SharpZip()    { }    /// <summary>    /// 壓縮    /// </summary>     /// <param name="filename"> 壓縮后的文件名(包含物理路徑)</param>    /// <param name="directory">待壓縮的文件夾(包含物理路徑)</param>    public static void PackFiles(string filename, string directory)    {      try      {        FastZip fz = new FastZip();        fz.CreateEmptyDirectories = true;        fz.CreateZip(filename, directory, true, "");        fz = null;      }      catch (Exception)      {        throw;      }    }    /// <summary>    /// 解壓縮    /// </summary>    /// <param name="file">待解壓文件名(包含物理路徑)</param>    /// <param name="dir"> 解壓到哪個目錄中(包含物理路徑)</param>    public static bool UnpackFiles(string file, string dir)    {      try      {        if (!Directory.Exists(dir))        {          Directory.CreateDirectory(dir);        }        ZipInputStream s = new ZipInputStream(File.OpenRead(file));        ZipEntry theEntry;        while ((theEntry = s.GetNextEntry()) != null)        {          string directoryName = Path.GetDirectoryName(theEntry.Name);          string fileName = Path.GetFileName(theEntry.Name);          if (directoryName != String.Empty)          {            Directory.CreateDirectory(dir + directoryName);          }          if (fileName != String.Empty)          {            FileStream streamWriter = File.Create(dir + theEntry.Name);            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;              }            }            streamWriter.Close();          }        }        s.Close();        return true;      }      catch (Exception)      {        throw;      }    }  }  public class ClassZip  {    #region 私有方法    /// <summary>    /// 遞歸壓縮文件夾方法    /// </summary>    private static bool ZipFileDictory(string FolderToZip, ZipOutputStream s, string ParentFolderName)    {      bool res = true;      string[] folders, filenames;      ZipEntry entry = null;      FileStream fs = null;      Crc32 crc = new Crc32();      try      {        entry = new ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip) + "/"));        s.PutNextEntry(entry);        s.Flush();        filenames = Directory.GetFiles(FolderToZip);        foreach (string file in filenames)        {          fs = File.OpenRead(file);          byte[] buffer = new byte[fs.Length];          fs.Read(buffer, 0, buffer.Length);          entry = new ZipEntry(Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip) + "/" + Path.GetFileName(file)));          entry.DateTime = DateTime.Now;          entry.Size = fs.Length;          fs.Close();          crc.Reset();          crc.Update(buffer);          entry.Crc = crc.Value;          s.PutNextEntry(entry);          s.Write(buffer, 0, buffer.Length);        }      }      catch      {        res = false;      }      finally      {        if (fs != null)        {          fs.Close();          fs = null;        }        if (entry != null)        {          entry = null;        }        GC.Collect();        GC.Collect(1);      }      folders = Directory.GetDirectories(FolderToZip);      foreach (string folder in folders)      {        if (!ZipFileDictory(folder, s, Path.Combine(ParentFolderName, Path.GetFileName(FolderToZip))))        {          return false;        }      }      return res;    }    /// <summary>    /// 壓縮目錄    /// </summary>    /// <param name="FolderToZip">待壓縮的文件夾,全路徑格式</param>    /// <param name="ZipedFile">壓縮后的文件名,全路徑格式</param>    private static bool ZipFileDictory(string FolderToZip, string ZipedFile, int level)    {      bool res;      if (!Directory.Exists(FolderToZip))      {        return false;      }      ZipOutputStream s = new ZipOutputStream(File.Create(ZipedFile));      s.SetLevel(level);      res = ZipFileDictory(FolderToZip, s, "");      s.Finish();      s.Close();      return res;    }    /// <summary>    /// 壓縮文件    /// </summary>    /// <param name="FileToZip">要進行壓縮的文件名</param>    /// <param name="ZipedFile">壓縮后生成的壓縮文件名</param>    private static bool ZipFile(string FileToZip, string ZipedFile, int level)    {      if (!File.Exists(FileToZip))      {        throw new System.IO.FileNotFoundException("指定要壓縮的文件: " + FileToZip + " 不存在!");      }      FileStream ZipFile = null;      ZipOutputStream ZipStream = null;      ZipEntry ZipEntry = null;      bool res = true;      try      {        ZipFile = File.OpenRead(FileToZip);        byte[] buffer = new byte[ZipFile.Length];        ZipFile.Read(buffer, 0, buffer.Length);        ZipFile.Close();        ZipFile = File.Create(ZipedFile);        ZipStream = new ZipOutputStream(ZipFile);        ZipEntry = new ZipEntry(Path.GetFileName(FileToZip));        ZipStream.PutNextEntry(ZipEntry);        ZipStream.SetLevel(level);        ZipStream.Write(buffer, 0, buffer.Length);      }      catch      {        res = false;      }      finally      {        if (ZipEntry != null)        {          ZipEntry = null;        }        if (ZipStream != null)        {          ZipStream.Finish();          ZipStream.Close();        }        if (ZipFile != null)        {          ZipFile.Close();          ZipFile = null;        }        GC.Collect();        GC.Collect(1);      }      return res;    }    #endregion    /// <summary>    /// 壓縮    /// </summary>    /// <param name="FileToZip">待壓縮的文件目錄</param>    /// <param name="ZipedFile">生成的目標文件</param>    /// <param name="level">6</param>    public static bool Zip(String FileToZip, String ZipedFile, int level)    {      if (Directory.Exists(FileToZip))      {        return ZipFileDictory(FileToZip, ZipedFile, level);      }      else if (File.Exists(FileToZip))      {        return ZipFile(FileToZip, ZipedFile, level);      }      else      {        return false;      }    }    /// <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("http://"))            {              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);      }    }  }  public class ZipHelper  {    #region 私有變量    String the_rar;    RegistryKey the_Reg;    Object the_Obj;    String the_Info;    ProcessStartInfo the_StartInfo;    Process the_Process;    #endregion    /// <summary>    /// 壓縮    /// </summary>    /// <param name="zipname">要解壓的文件名</param>    /// <param name="zippath">要壓縮的文件目錄</param>    /// <param name="dirpath">初始目錄</param>    public void EnZip(string zipname, string zippath, string dirpath)    {      try      {        the_Reg = Registry.ClassesRoot.OpenSubKey(@"Applications/WinRAR.exe/Shell/Open/Command");        the_Obj = the_Reg.GetValue("");        the_rar = the_Obj.ToString();        the_Reg.Close();        the_rar = the_rar.Substring(1, the_rar.Length - 7);        the_Info = " a  " + zipname + " " + zippath;        the_StartInfo = new ProcessStartInfo();        the_StartInfo.FileName = the_rar;        the_StartInfo.Arguments = the_Info;        the_StartInfo.WindowStyle = ProcessWindowStyle.Hidden;        the_StartInfo.WorkingDirectory = dirpath;        the_Process = new Process();        the_Process.StartInfo = the_StartInfo;        the_Process.Start();      }      catch (Exception ex)      {        throw new Exception(ex.Message);      }    }    /// <summary>    /// 解壓縮    /// </summary>    /// <param name="zipname">要解壓的文件名</param>    /// <param name="zippath">要解壓的文件路徑</param>    public void DeZip(string zipname, string zippath)    {      try      {        the_Reg = Registry.ClassesRoot.OpenSubKey(@"Applications/WinRar.exe/Shell/Open/Command");        the_Obj = the_Reg.GetValue("");        the_rar = the_Obj.ToString();        the_Reg.Close();        the_rar = the_rar.Substring(1, the_rar.Length - 7);        the_Info = " X " + zipname + " " + zippath;        the_StartInfo = new ProcessStartInfo();        the_StartInfo.FileName = the_rar;        the_StartInfo.Arguments = the_Info;        the_StartInfo.WindowStyle = ProcessWindowStyle.Hidden;        the_Process = new Process();        the_Process.StartInfo = the_StartInfo;        the_Process.Start();      }      catch (Exception ex)      {        throw new Exception(ex.Message);      }    }  }}

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美在线国产| 91色精品视频在线| 国产精品6699| 日韩av有码在线| 亚洲福利视频久久| 精品视频久久久久久久| 亚洲精美色品网站| 成人欧美一区二区三区黑人孕妇| 国产视频精品自拍| 亚洲一区二区中文字幕| 久久精品在线播放| 久久久久国色av免费观看性色| 日本国产欧美一区二区三区| 在线观看国产成人av片| 久久色在线播放| 亚洲欧美成人在线| 日韩美女免费视频| 亚洲一区二区国产| 国产日韩中文在线| 中文字幕日韩av| 久久亚洲精品一区二区| 久久久免费av| 亚洲一区二区少妇| 欧美电影在线免费观看网站| 国产精品网红福利| 精品亚洲精品福利线在观看| 国内精品久久久久影院 日本资源| 国产一区二区丝袜| 亚洲精品动漫久久久久| 欧美在线免费看| 这里只有精品久久| 欧美老女人性生活| 欧美老妇交乱视频| 国产福利视频一区| 日韩中文在线中文网在线观看| 亚洲欧洲一区二区三区在线观看| 一区二区三区亚洲| 国产婷婷色综合av蜜臀av| 国产精品jizz在线观看麻豆| 在线免费看av不卡| 欧美国产日韩一区| 91在线视频精品| 91探花福利精品国产自产在线| 亚洲精品电影在线| 久久久久久久久久久成人| 在线亚洲男人天堂| 国产成人精品a视频一区www| 91久久精品美女高潮| 欧美精品在线免费播放| 国产欧美日韩精品专区| 欧美日韩国产区| 国产在线日韩在线| 亚洲欧美制服综合另类| 国产精品自拍小视频| 国产精品久久国产精品99gif| 91成人福利在线| 亚洲精品综合久久中文字幕| 中文字幕亚洲欧美日韩在线不卡| 国产精品99久久久久久人| 亚洲欧美日韩在线高清直播| 国产精品免费在线免费| 欧美国产精品日韩| 久久久久久久久中文字幕| 亚洲国产成人av在线| 97视频免费看| 成人美女av在线直播| 国产视频欧美视频| 久久99热这里只有精品国产| 精品国产一区久久久| 黑人巨大精品欧美一区二区| 国产精品久久久久久搜索| 日韩网站免费观看| 久久精品人人爽| 久久久久国产视频| 亚洲一二三在线| 久久久久久九九九| 欧美最猛性xxxx| 欧美日产国产成人免费图片| 亚洲综合第一页| 91精品久久久久久久久久入口| 欧美激情影音先锋| 欧美一级黄色网| 日韩在线观看免费高清| 国产一区二区日韩精品欧美精品| 精品国产91久久久久久| 欧美另类xxx| 91精品中国老女人| 亚洲国产成人精品电影| 国产99久久精品一区二区| 高清欧美性猛交xxxx| 性色av一区二区三区免费| 日韩中文字幕免费看| 欧美黑人巨大精品一区二区| 国产日韩欧美自拍| 伊人久久久久久久久久久久久| 日韩欧美在线观看视频| 欧美激情一区二区三级高清视频| 日本高清+成人网在线观看| 亚洲视频在线观看网站| 久久久久久久久久久网站| 日韩第一页在线| 亚洲精品久久7777777| 亚洲第一偷拍网| 国模私拍一区二区三区| 欧美成人精品在线播放| 懂色av一区二区三区| 456亚洲影院| 国产香蕉一区二区三区在线视频| 亚洲人成电影网站色…| 一区二区三区精品99久久| 欧美成人第一页| 亚洲男人天堂2024| 91精品国产高清久久久久久久久| 亚洲qvod图片区电影| 欧美日韩中文字幕| 久久av.com| 国产精品人人做人人爽| 国产精品亚发布| 亚洲成人免费网站| 成人午夜在线观看| 亚洲自拍中文字幕| 91精品国产99久久久久久| 国产精品99免视看9| 久久免费精品日本久久中文字幕| 国产色综合天天综合网| 国产精品视频导航| 日韩电影中文字幕| 亚洲欧美资源在线| 欧美一级片一区| 日韩av免费观影| 欧美黑人巨大xxx极品| 91精品视频免费观看| 亚洲人成人99网站| 日韩第一页在线| 日韩精品视频三区| 日本精品va在线观看| 高清欧美性猛交| 欧美巨猛xxxx猛交黑人97人| 色综合久久精品亚洲国产| 国产精品久久久久av| 在线看福利67194| 夜夜嗨av色一区二区不卡| 国产精品男女猛烈高潮激情| 欧美黄色片在线观看| 综合网中文字幕| 精品久久久久久中文字幕大豆网| 亚洲福利在线视频| 欧美日韩亚洲一区二区三区| 亚洲美腿欧美激情另类| 97在线看免费观看视频在线观看| 亚洲一区二区久久| 一本一本久久a久久精品牛牛影视| 国产精品一区二区三区久久| 亚洲午夜小视频| 欧美在线一级视频| 欧美裸体xxxx极品少妇软件| 精品亚洲一区二区三区| 国产精品成av人在线视午夜片| 亚洲国产成人在线播放| 久久久久久久久久久免费| 久久6免费高清热精品| 亚洲尤物视频网| 中文字幕国产精品久久| 日韩av最新在线|