⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zipclass.cs

📁 实现文件的压缩与解压,编程环境.net2003,在win2000+sp4下调试通过
💻 CS
字号:
using System;
using System.IO;

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


namespace UnZip
{
	/// <summary>
	/// ZipClass 的摘要说明。
	/// </summary>
		public class ZipClass
		{
			public string cutStr = "";

			#region
			//这个函数我没有去研究他
			private void ZipFile(string FileToZip, string ZipedFile ,int CompressionLevel, int BlockSize)
			{
				//如果文件没有找到则报错。
				if (! System.IO.File.Exists(FileToZip)) 
				{
					throw new System.IO.FileNotFoundException("The specified file " + FileToZip + " could not be found. Zipping aborderd");
				}
  
				System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip,System.IO.FileMode.Open , System.IO.FileAccess.Read);
				System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);
				ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);
				ZipEntry ZipEntry = new ZipEntry("ZippedFile");
				ZipStream.PutNextEntry(ZipEntry);
				ZipStream.SetLevel(CompressionLevel);
				byte[] buffer = new byte[BlockSize];
				System.Int32 size =StreamToZip.Read(buffer,0,buffer.Length);
				ZipStream.Write(buffer,0,size);
				try 
				{
					while (size < StreamToZip.Length) 
					{
						int sizeRead =StreamToZip.Read(buffer,0,buffer.Length);
						ZipStream.Write(buffer,0,sizeRead);
						size += sizeRead;
					}
				} 
				catch(System.Exception ex)
				{
					throw ex;
				}
				ZipStream.Finish();
				ZipStream.Close();
				StreamToZip.Close();
			}
			#endregion

			//Get all DirectoryInfo
			public void direct(DirectoryInfo di,ref ZipOutputStream s,Crc32 crc)
			{
				//DirectoryInfo di = new DirectoryInfo(filenames);
				DirectoryInfo[] dirs = di.GetDirectories("*");

				//遍历目录下面的所有的子目录
				foreach(DirectoryInfo dirNext in dirs)
				{
					//将该目录下的所有文件添加到 ZipOutputStream s 压缩流里面
					FileInfo[] a  = dirNext.GetFiles();
					this.writeStream( ref s,a,crc);

					//递归调用直到把所有的目录遍历完成
					direct(dirNext,ref s,crc);
				}
			}

			public void writeStream(ref ZipOutputStream s,FileInfo[] a,Crc32 crc)
			{
				foreach ( FileInfo fi in a )
				{
					//string fifn = fi.FullName;
					FileStream fs = fi.OpenRead();

					byte[] buffer = new byte[fs.Length];
					fs.Read(buffer, 0, buffer.Length);


					//ZipEntry entry = new ZipEntry(file);   Path.GetFileName(file)
					string file = fi.FullName;
					file = file.Replace(cutStr,"");

					ZipEntry entry = new ZipEntry(file);

					entry.DateTime = DateTime.Now;
   
					// set Size and the crc, because the information
					// about the size and crc should be stored in the header
					// if it is not set it is automatically written in the footer.
					// (in this case size == crc == -1 in the header)
					// Some ZIP programs have problems with zip files that don't store
					// the size and crc in the header.
					entry.Size = fs.Length;
					fs.Close();

					crc.Reset();
					crc.Update(buffer);
   
					entry.Crc  = crc.Value;
   
					s.PutNextEntry(entry);
   
					s.Write(buffer, 0, buffer.Length);

			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -