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

📄 zipclass.cs

📁 压缩和解压缩的源码,可以支持大多数文件的压缩和解压缩
💻 CS
字号:
using System;
using System.IO;

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

namespace SoundCondense
{
	/// <summary>
	/// ZipClass 的摘要说明。
	/// </summary>
	public class ZipClass
	{
		public 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();
		}
 
		public void ZipFileMain(string[] args)
		{
//			string[] filenames = Directory.GetFiles(args[0]);
			string[] filenames = new string[]{args[0]};
  
			Crc32 crc = new Crc32();
			ZipOutputStream s = new ZipOutputStream(File.Create(args[1]));
  
			s.SetLevel(6); // 0 - store only to 9 - means best compression
  
			foreach (string file in filenames) 
			{
				//打开压缩文件
				FileStream fs = File.OpenRead(file);
   
				byte[] buffer = new byte[fs.Length];
				fs.Read(buffer, 0, buffer.Length);
				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);   
			}  
			s.Finish();
			s.Close();
		}

		/// <summary>
		/// 压缩文件
		/// </summary>
		/// <param name="sourceFileNames">压缩文件名称集合</param>
		/// <param name="destFileName">压缩后文件名称</param>
		/// <param name="password">密码</param>
		public static void zipFile(string path,string destFileName,string password)
		{
			Crc32 crc = new Crc32();
			ZipOutputStream s = new ZipOutputStream(File.Create(destFileName));
			s.Password="";
			s.SetLevel(6); // 0 - store only to 9 - means best compression
			//定义
			System.IO.DirectoryInfo myDir = new DirectoryInfo(path);
			if(myDir.Exists == true)
			{
				System.IO.FileInfo[] myFileAry = myDir.GetFiles();
    
				//循环提取文件夹下每一个文件,提取信息,
				foreach (FileInfo objFiles in myFileAry)
				{
					FileStream fs = File.OpenRead(objFiles.FullName);
					byte[] buffer = new byte[fs.Length];
					fs.Read(buffer, 0, buffer.Length);
					ZipEntry entry = new ZipEntry(objFiles.FullName);
					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);           
				}   
				s.Finish();
				s.Close();
			}
		}

		/// <summary>
		/// 分段压缩
		/// </summary>
		/// <param name="path"></param>
		/// <param name="M"></param>
		/// <returns></returns>
		public string CreateZIPFile(string path,int M) 
		{ 
			try 
			{ 
				Crc32 crc = new Crc32(); 
				ICSharpCode.SharpZipLib.Zip.ZipOutputStream zipout=new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(System.IO.File.Create(path+".zip")); 
				System.IO.FileStream fs=System.IO.File.OpenRead(path); 
				long pai=1024*1024*M;//每M兆写一次 
				long forint=fs.Length/pai+1; 
				byte[] buffer=null; 
				ZipEntry entry = new ZipEntry(System.IO.Path.GetFileName(path)); 
				entry.Size = fs.Length; 
				entry.DateTime = DateTime.Now; 
				zipout.PutNextEntry(entry); 
				for(long i=1;i<=forint;i++) 
				{ 
					if(pai*i<fs.Length) 
					{ 
						buffer = new byte[pai]; 
						fs.Seek(pai*(i-1),System.IO.SeekOrigin.Begin); 
					} 
					else 
					{ 
						if(fs.Length<pai) 
						{ 
							buffer = new byte[fs.Length]; 
						} 
						else 
						{ 
							buffer = new byte[fs.Length-pai*(i-1)]; 
							fs.Seek(pai*(i-1),System.IO.SeekOrigin.Begin); 
						} 
					} 
					fs.Read(buffer,0,buffer.Length); 
					crc.Reset(); 
					crc.Update(buffer); 
					zipout.Write(buffer,0, buffer.Length); 
					zipout.Flush(); 
				} 
				fs.Close(); 
				zipout.Finish(); 
				zipout.Close(); 
//				System.IO.File.Delete(path); 
				return path+".zip"; 
			} 
			catch(Exception ex) 
			{ 
				string str=ex.Message; 
				return path; 
			} 
		} 

		/// <summary>
        /// 以Zip格式压缩指定文件
        /// </summary>
        /// <param name="源文件">要压缩的文件路径</param>
        /// <param name="目标文件">压缩后保存的文件路径</param>
        /*
        public static void CompressFile(string oldFile, string newFile)
        {
            if (!File.Exists(oldFile)) throw new FileNotFoundException();
            using (FileStream sourceStream = new FileStream(oldFile, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                byte[] buffer = new byte[sourceStream.Length];
                int checkCounter = sourceStream.Read(buffer, 0, buffer.Length);
                if (checkCounter != buffer.Length) throw new ApplicationException();
                using (FileStream destinationStream = new FileStream(newFile, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    using (GZipStream compressedStream = new GZipStream(destinationStream, CompressionMode.Compress, true))
                    {
                        compressedStream.Write(buffer, 0, buffer.Length);
                    }
                }
            }
        }
		*/
	}
}

⌨️ 快捷键说明

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