c# zip 解压数据流
2013-07-12 11:16:03 vaecnfeilong 阅读数 1959

此方法需要在程序内引用ICSharpCode.SharpZipLib.dll 类库

 /// <summary>
        /// 功能:解压zip格式的文件。
        /// </summary>
        /// <param name="zipFilePath">压缩文件路径</param>
        /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
        /// <param name="err">出错信息</param>
        /// <returns>解压是否成功</returns>
        public bool UnZipFile(string zipFilePath, string unZipDir)// , out string err
        {
            // err = "";
            if (zipFilePath == string.Empty)
            {
                //err = "压缩文件不能为空!";
                return false;
            }
            if (!File.Exists(zipFilePath))
            {
                //err = "压缩文件不存在!";
                return false;
            }
            //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
            if (unZipDir == string.Empty)
                unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
            if (!unZipDir.EndsWith("\\"))
                unZipDir += "\\";
            if (!Directory.Exists(unZipDir))
                Directory.CreateDirectory(unZipDir);

            try
            {
                using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath.ToLower())))
                {

                    ZipEntry theEntry;
                    while ((theEntry = s.GetNextEntry()) != null)
                    {
                        string directoryName = Path.GetDirectoryName(theEntry.Name);
                        string fileName = Path.GetFileName(theEntry.Name);
                        if (directoryName.Length > 0)
                        {
                            Directory.CreateDirectory(unZipDir + directoryName);
                        }
                        if (!directoryName.EndsWith("\\"))
                            directoryName += "\\";
                        if (fileName != String.Empty)
                        {
                            using (FileStream streamWriter = File.Create(unZipDir + 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;
                                    }
                                }
                            }
                        }
                    }//while
                }
            }
            catch (Exception ex)
            {
                //err = ex.Message;
                return false;
            }
            return true;
        }//解压结束


2016-11-17 17:28:00 u013225189 阅读数 2747




using System;  
using System.Text;  
using System.Collections;  
using System.IO;  
using System.Diagnostics;  
using System.Runtime.Serialization.Formatters.Binary;  
using System.Data;  
  
using ICSharpCode.SharpZipLib.Zip;  
using ICSharpCode.SharpZipLib.Zip.Compression;  
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;   




namespace XML
{
    class UNZIP
    {




    /// <summary>  
    /// 功能:解压文件  
    /// creator chaodongwang 2009-11-11  
    /// </summary>  




        /// <summary>  
        /// 功能:解压zip格式的文件。  
        /// </summary>  
        /// <param name="zipFilePath">压缩文件路径</param>  
        /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>  
        /// <param name="err">出错信息</param>  
        /// <returns>解压是否成功</returns>  
        public void UnZip(string zipFilePath, string unZipDir)  
        {  
          
            if (zipFilePath == string.Empty)  
            {  
                throw new Exception("压缩文件不能为空!");  
            }  
            if (!File.Exists(zipFilePath))  
            {  
                throw new System.IO.FileNotFoundException("压缩文件不存在!");  
            }




            //文件夹里建一个带有时间戳的文件夹
            unZipDir += "weather"+DateTime.Now.ToString("yyyyMMddHHmmsss");


    
            //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹  
            if (unZipDir == string.Empty)  
                unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));  


            if (!unZipDir.EndsWith("\\"))  
                unZipDir += "\\";
       
  


           if (!Directory.Exists(unZipDir))  
                Directory.CreateDirectory(unZipDir);


        
  
            using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))  
            {  
  
                ZipEntry theEntry;  
                while ((theEntry = s.GetNextEntry()) != null)  
                {  
                    string directoryName = Path.GetDirectoryName(theEntry.Name);  
                    string fileName = Path.GetFileName(theEntry.Name);  
                    if (directoryName.Length > 0)  
                    {  
                        Directory.CreateDirectory(unZipDir + directoryName);
                        //将解压后的文件放到带时间戳的文件夹里
                 
                       
                    }  
                    if (!directoryName.EndsWith("\\"))  
                        directoryName += "\\";  
                    if (fileName != String.Empty)  
                    {
                       
                        using (FileStream streamWriter = File.Create(unZipDir + 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;  
                                }  
                            }  
                        }  
                    }  
                }  
            }  
        }  
    }   



        ///













2017-08-04 14:14:10 lyn20112935 阅读数 400

本文是我自己在写功能的时候用到,在网上查看到别人的,所以转载过来,再添点我自己的理解备忘。原文链接:http://www.cnblogs.com/GoCircle/p/6544678.html。

这里利用了一个压缩帮助类,使用的是有要添加一个dll引用ICSharpCode.SharpZipLib.dll,下载地址:http://download.csdn.net/detail/cleopard/8304539,下载完成后将这个dll引用进来,然后再代码的开头要声明一下:

using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;

其中ICSharpCode是引用文件夹中存放dll的路径。

压缩文件以及文件夹为zip代码如下:

		/// <summary>  
		///  ファイルをZipする  
		/// </summary>  
		/// <param name="filesName">ファイル名</param>  
		/// <param name="ZipedFileName">Zipファイル名</param>  
		/// <returns></returns>  
		public static bool Zip(string[] filesName, string ZipedFileName,string kbn)
		{
			//有効ファイルの再配列
			filesName = filesName.Where(f => File.Exists(f) || Directory.Exists(f)).ToArray();
			//有効ファイルがある場合、ジップを行う
			if (filesName.Length != 0)
			{
				ZipOutputStream s = new ZipOutputStream(File.Create(ZipedFileName));
				s.SetLevel(6);
				if (kbn == "PC")
				{
					//ジップファイル作成
					ZipFileDictory(filesName, s, "/");
				}
				else
				{
					//ジップファイル作成
					ZipFileDictory(filesName, s, "/");
				}
				s.Finish();
				s.Close();

				return true;
			}
			else
			{
				MessageBox.Show(Msg.msgNoEffectiveFile);
				return false;
			}
		}

		private static void ZipFileDictory(string[] filesName, ZipOutputStream s, string folderName,string kbn)
		{
			ZipEntry entry = null;
			FileStream fs = null;
			Crc32 crc = new Crc32();
			try
			{
				int projNums = 1;
				int dirNums = 1;
				int boardNums = 1;
				for (int i = 0; i < filesName.Length; i++)
				{
					//ファイルのしょの所属フォルダ作成
					string file = filesName[i];
					entry = new ZipEntry(folderName);
					s.PutNextEntry(entry);
					s.Flush();
					//該当ファイル名がファイルかフォルダかを判断する
					if (Directory.Exists(file))
					{
						//フォルダの場合
						string tmpFilePath = file;
						//黒板及び黒板画像を取得する
						string[] tmpFileName = Directory.GetFileSystemEntries(tmpFilePath, "BD*");
						if (kbn == "PC")
						{
							if (!tmpFilePath[tmpFilePath.Length - 1].Equals("/"))
							{
								tmpFilePath = (tmpFilePath + "/").Replace("\\", "/".ToString());
							}
							tmpFilePath = tmpFilePath.Substring(Para.path.Replace("\\", "/".ToString()).Length + 1);
						}
						else
						{
							if (!tmpFilePath[tmpFilePath.Length - 1].Equals("/"))
							{
								tmpFilePath = tmpFilePath.Replace("\\", "/".ToString());
							}
							if (dirNums < 10)
							{
								tmpFilePath = "project" + dirNums.ToString("00") + "/";
								dirNums++;
							}
							else
							{
								tmpFilePath = "project" + dirNums.ToString() + "/";
								dirNums++;
							}

						}
						
						tmpFileName = GetCompleteBD(tmpFileName);
						tmpFileName = tmpFileName.Where(f => File.Exists(f)).ToArray();
						if (tmpFileName.Length > 0)
						{
							if (kbn == "PC")
							{
								//黒板がある場合、再帰を呼び出す
								ZipFileDictory(tmpFileName, s, tmpFilePath,"PC");
							}
							else
							{
								//黒板がある場合、再帰を呼び出す
								ZipFileDictory(tmpFileName, s, tmpFilePath, "IPAD");
							}
							
						}
						else
						{
							entry = new ZipEntry(tmpFilePath);
							s.PutNextEntry(entry);
							s.Flush();
						}
					}
					else
					{
						string tempFile = string.Empty;
						fs = File.OpenRead(file);
						byte[] buffer = new byte[fs.Length];
						fs.Read(buffer, 0, buffer.Length);
						tempFile = Path.GetFileName(file);
						if (kbn == "IPAD")
						{
							if (tempFile.Contains("project"))
							{
								if (projNums < 10)
								{
									tempFile = "project" + projNums.ToString("00") + ".xml";
								}
								else
								{
									tempFile = "project" + projNums.ToString() + ".xml";
								}
								projNums++;
							}
							else if (tempFile.Contains("BD"))
							{
								if (boardNums < 10000)
								{
									tempFile = "BD" + boardNums.ToString("0000") + ".xml";
								}
								else
								{
									tempFile = "BD" + boardNums.ToString() + ".xml";
								}
								boardNums++;
							}
						}
						if (!folderName.Equals("/"))
						{
							tempFile = folderName + tempFile;
						}
						entry = new ZipEntry(tempFile);
						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);
					}
				}
			}
			finally
			{
				if (fs != null)
				{
					fs.Close();
					fs = null;
				}
				if (entry != null)
					entry = null;
				GC.Collect();
			}
		}

解压zip文件的代码如下,解压文件fileToUnzip到zipFolder路径下:

public static bool UnZip(string fileToUnZip, string zipedFolder)
		{
			bool result = true;
			FileStream fs = null;
			ZipInputStream zipStream = null;
			ZipEntry ent = null;
			string fileName;

			if (!File.Exists(fileToUnZip))
				return false;

			if (!Directory.Exists(zipedFolder))
				Directory.CreateDirectory(zipedFolder);

			try
			{
				zipStream = new ZipInputStream(File.OpenRead(fileToUnZip));
				while ((ent = zipStream.GetNextEntry()) != null)
				{
					if (!string.IsNullOrEmpty(ent.Name))
					{
						fileName = Path.Combine(zipedFolder, ent.Name);
						fileName = fileName.Replace('/', '\\');

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

						fs = File.Create(fileName);
						int size = 2048;
						byte[] data = new byte[size];
						while (true)
						{
							size = zipStream.Read(data, 0, data.Length);
							if (size > 0)
								fs.Write(data, 0, size);
							else
								break;
						}
						fs.Close();
					}
				}
			}
			catch
			{
				result = false;
			}
			finally
			{
				if (fs != null)
				{
					fs.Close();
					fs.Dispose();
				}
				if (zipStream != null)
				{
					zipStream.Close();
					zipStream.Dispose();
				}
				if (ent != null)
				{
					ent = null;
				}
				GC.Collect();
				GC.Collect(1);
			}
			return result;
		}



2019-04-03 16:53:17 yhld456 阅读数 188

引入

using System.IO.Compression;

解压

ZipFile.ExtractToDirectory(currentPath+"jre.zip", currentPath);
2013-07-12 19:08:00 weixin_34204722 阅读数 20

此方法需要在程序内引用ICSharpCode.SharpZipLib.dll 类库

 

 /// <summary>
        /// 功能:解压zip格式的文件。
        /// </summary>
        /// <param name="zipFilePath">压缩文件路径</param>
        /// <param name="unZipDir">解压文件存放路径,为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹</param>
        /// <param name="err">出错信息</param>
        /// <returns>解压是否成功</returns>
        public bool UnZipFile(string zipFilePath, string unZipDir)// , out string err
        {
            // err = "";
            if (zipFilePath == string.Empty)
            {
                //err = "压缩文件不能为空!";
                return false;
            }
            if (!File.Exists(zipFilePath))
            {
                //err = "压缩文件不存在!";
                return false;
            }
            //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
            if (unZipDir == string.Empty)
                unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));
            if (!unZipDir.EndsWith("\\"))
                unZipDir += "\\";
            if (!Directory.Exists(unZipDir))
                Directory.CreateDirectory(unZipDir);

            try
            {
                using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath.ToLower())))
                {

                    ZipEntry theEntry;
                    while ((theEntry = s.GetNextEntry()) != null)
                    {
                        string directoryName = Path.GetDirectoryName(theEntry.Name);
                        string fileName = Path.GetFileName(theEntry.Name);
                        if (directoryName.Length > 0)
                        {
                            Directory.CreateDirectory(unZipDir + directoryName);
                        }
                        if (!directoryName.EndsWith("\\"))
                            directoryName += "\\";
                        if (fileName != String.Empty)
                        {
                            using (FileStream streamWriter = File.Create(unZipDir + 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;
                                    }
                                }
                            }
                        }
                    }//while
                }
            }
            catch (Exception ex)
            {
                //err = ex.Message;
                return false;
            }
            return true;
        }//解压结束


 

 

C# 解压Zip包

阅读数 281

using Ionic.Zip;publicvoidDisZip(stringzipFile,stringFilePath)    {      try      {        //需要设置编码,否则中文会出现乱码        ReadOptionstion=newReadOptions();     ...

博文 来自: yhd0916

C#中关于压缩数据流和解压数据流的实现

阅读数 11347

c#中压缩数据流的方法在网上找了很久没有找到ziji

博文 来自: zhujunxxxxx

C# 文件压缩与解压(ZIP格式)

阅读数 2602

Hello,大家好,我是网呦,今天分享的内容是:C#操作文件压缩与解压(zip格式)。该文章CoreCode引用于:C#文件压缩与解压在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是RAR的,但是由于RAR不是一个开放的标准,因此ZIP成了更多人的选择。如果你不想自己开发的话可以选择开源的项目,比如SharpZipLib就是一个不错的选择。我在引用的程序上

博文 来自: U_9_5

C#使用Ionic.Zip.dll解压ZIP

阅读数 697

 解压ZIP文件的方法如下:(内容为自己实际项目下的一个更新程序)stringstrZipPath=System.Windows.Forms.Application.StartupPath+"//Update.zip";//需要解压的文件stringstrUnZipPath=System.Windows.Forms.Application.StartupPath;//...

博文 来自: qq395723081

C# 文件压缩与解压(ZIP格式)

阅读数 21

 在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压缩文件格式都是RAR的,但是由于RAR不是一个开放的标准,因此ZIP成了更多人的选择。如果你不想自己开发的话可以选择开源的项目,比如SharpZipLib就是一个不错的选择。组件的使用比较简单,请参照下面的代码。点击下载项目源码 /**//* * Gary Zhang -- cbcye@live.com * ...

博文 来自: weixin_33752045
没有更多推荐了,返回首页