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

📄 zip.cs

📁 给出了 zip 压缩算法的完整实现过程。
💻 CS
📖 第 1 页 / 共 2 页
字号:
#region README	//_____________________________________________________________________________	//	//Sample C# code, .NET Framework 1.1, contributed to the Info-Zip project by 	//Adrian Maull, April 2005.	//	//If you have questions or comments, contact me at adrian.maull@sprintpcs.com.  Though	//I will try to respond to coments/questions, I do not guarantee such response.	//	//THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY	//KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE	//IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A	//PARTICULAR PURPOSE.	//	//_____________________________________________________________________________#endregion#region KNOWN ISSUES		//_____________________________________________________________________________	//	//KNOWN ISSUES:	//From my testing I have encountered at least one issue (though there may be more)	//	//1.	I receive an error code from the Unzip32.dll when I try to set a password, which requires	//		setting the fEncrypt parameter of the ZPOPT structure to 1.  In this implementation this	//		is setting the Encrypt property to EncryptionSpecifiedEnum.True	//	//	//_____________________________________________________________________________#endregionusing System;using System.Runtime.InteropServices;using System.Security.Permissions;using System.Text;using System.Windows.Forms;namespace CSharpInfoZip_ZipSample{	#region Public Enums	public enum TempDirectorySpecifiedEnum {False, True};		// 1 If Temp dir Wanted, Else 0	public enum EncryptionSpecifiedEnum {False, True};				// 1 If Encryption Wanted, Else 0	public enum SystemFilesIgnoredEnum {True, False};			// 1 To Include System/Hidden Files, Else 0	public enum VolumeLabelStoredEnum {False, True};				// 1 If Storing Volume Label, Else 0	public enum ExtraAttributesExcludedEnum {False, True};		// 1 If Excluding Extra Attributes, Else 0	public enum DirectoryEntriesIgnoredEnum {False, True};		// 1 If Ignoring Directory Entries, Else 0	public enum ExcludeDateEnum {False, True};						// 1 If Excluding Files Earlier Than Specified Date, Else 0	public enum IncludeDateEnum {False, True};						// 1 If Including Files Earlier Than Specified Date, Else 0	public enum VerboseMessagesEnum {False, True};				// 1 If Full Messages Wanted, Else 0	public enum QuietMessageseEnum {False, True};					// 1 If Minimum Messages Wanted, Else 0	public enum CRLF_LFTranslateEnum {False, True};				// 1 If Translate CR/LF To LF, Else 0	public enum LF_CRLFTranslateEnum {False, True};				// 1 If Translate LF To CR/LF, Else 0	public enum JunkDirEnum {False, True};								// 1 If Junking Directory Names, Else 0	public enum GrowZipFileEnum {False, True};						// 1 If Allow Appending To Zip File, Else 0	public enum ForceDOSNamesEnum {False, True};					// 1 If Making Entries Using DOS File Names, Else 0	public enum MoveEnum {False, True};									// 1 If Deleting Files Added Or Updated, Else 0	public enum DeleteEntriesEnum {False, True};						// 1 If Files Passed Have To Be Deleted, Else 0	public enum UpdateEnum {False, True};								// 1 If Updating Zip File-Overwrite Only If Newer, Else 0	public enum FreshenEnum {False, True};								// 1 If Freshing Zip File-Overwrite Only, Else 0	public enum JunkSFXPrefixEnum {False, True};					// 1 If Junking SFX Prefix, Else 0	public enum LatestTimeEnum {False, True};							// 1 If Setting Zip File Time To Time Of Latest File In Archive, Else 0	public enum CommentEnum {False, True};							// 1 If Putting Comment In Zip File, Else 0	public enum OffsetsEnum {False, True};								// 1 If Updating Archive Offsets For SFX Files, Else 0	public enum PrivilegeSaveEnum {False, True};						// 1 If Not Saving Privileges, Else 0	public enum RecurseEnum {None, Level1, Level2};				// 1 (-r), 2 (-R) If Recursing Into Sub-Directories, Else 0	public enum RepairEnum {None, Fix, DeepFix};					// 1 = Fix Archive, 2 = Try Harder To Fix, Else 0	public enum CompressionLevelEnum {Level0 = 48, Level1,	// Compression Level - 0 = Stored 6 = Default 9 = Max															Level2, Level3,			//Start at 48 because 0 - 9 in ASCII codes is 48 - 57															Level4, Level5, 															Level6, Level7, Level8, 															Level9};						#endregion	#region Event Delegates	public delegate void ZipDLLPrintMessageEventHandler(object sender, ZipDLLPrintMessageEventArgs  e);	public delegate void ZipDLLServiceMessageEventHandler(object sender, ZipDLLServiceMessageEventArgs  e);	#endregion	/// <summary>	/// Summary description for Zip.	/// </summary>	public class Zip	{		#region Private Vars		private string m_Password;		private string m_Comment;		private string [] m_FilesToZip;		private string m_ZipFileName;		private int m_Stop;		private ZIPUSERFUNCTIONS m_zuf;		private ZPOPT m_zopts = new ZPOPT();		private ASCIIEncoding m_Ascii = new ASCIIEncoding();		private ZDLLPrintCallback m_CallbackPrint;		private ZDLLServiceCallback m_CallbackService;		private ZDLLPasswordCallback m_CallbackPassword;		private ZDLLCommentCallback m_CallbackComment;		private string m_Date = string.Empty;											// US Date (8 Bytes Long) "12/31/98"?		private string m_RootDir = string.Empty;										// Root Directory Pathname (Up To 256 Bytes Long)		private string m_TempDir = string.Empty;									// Temp Directory Pathname (Up To 256 Bytes Long)		private TempDirectorySpecifiedEnum m_Temp;							// 1 If Temp dir Wanted, Else 0//		private int m_Suffix;																	// Include Suffixes (Not Yet Implemented!)		private EncryptionSpecifiedEnum m_EncryptionSpecified;				// 1 If Encryption Wanted, Else 0		private SystemFilesIgnoredEnum m_SystemFilesIgnored;				// 1 To Include System/Hidden Files, Else 0		private VolumeLabelStoredEnum m_VolumeLabelStored;				// 1 If Storing Volume Label, Else 0		private ExtraAttributesExcludedEnum m_ExtraAttributesExcluded;	// 1 If Excluding Extra Attributes, Else 0		private DirectoryEntriesIgnoredEnum m_DirEntriesIgnored;			// 1 If Ignoring Directory Entries, Else 0		private ExcludeDateEnum m_ExcludeDate;									// 1 If Excluding Files Earlier Than Specified Date, Else 0		private IncludeDateEnum m_IncludeDate;									// 1 If Including Files Earlier Than Specified Date, Else 0		private VerboseMessagesEnum m_VerboseMessages;					// 1 If Full Messages Wanted, Else 0		private QuietMessageseEnum m_QuietMessages;							// 1 If Minimum Messages Wanted, Else 0		private CRLF_LFTranslateEnum m_CRLF_LFTranslate;					// 1 If Translate CR/LF To LF, Else 0		private LF_CRLFTranslateEnum m_LF_CRLFTranslate;					// 1 If Translate LF To CR/LF, Else 0		private JunkDirEnum m_JunkDir;													// 1 If Junking Directory Names, Else 0		private GrowZipFileEnum m_GrowZipFile;										// 1 If Allow Appending To Zip File, Else 0		private ForceDOSNamesEnum m_ForceDOSNames;						// 1 If Making Entries Using DOS File Names, Else 0		private MoveEnum m_Move;														// 1 If Deleting Files Added Or Updated, Else 0		private DeleteEntriesEnum m_DeleteEntries;									// 1 If Files Passed Have To Be Deleted, Else 0		private UpdateEnum m_Update;													// 1 If Updating Zip File-Overwrite Only If Newer, Else 0		private FreshenEnum m_Freshen;												// 1 If Freshing Zip File-Overwrite Only, Else 0		private JunkSFXPrefixEnum m_JunkSFXPrefix;								// 1 If Junking SFX Prefix, Else 0		private LatestTimeEnum m_LatestTime;										// 1 If Setting Zip File Time To Time Of Latest File In Archive, Else 0		private CommentEnum m_CommentOption;									// 1 If Putting Comment In Zip File, Else 0		private OffsetsEnum m_Offsets;													// 1 If Updating Archive Offsets For SFX Files, Else 0		private PrivilegeSaveEnum m_PrivilegeSave;								// 1 If Not Saving Privileges, Else 0//		private int m_Encryption;															// Read Only Property!!!		private RecurseEnum m_Recurse;												// 1 (-r), 2 (-R) If Recursing Into Sub-Directories, Else 0		private RepairEnum m_Repair;													// 1 = Fix Archive, 2 = Try Harder To Fix, Else 0		private CompressionLevelEnum m_CompressionLevel;					// Compression Level - 0 = Stored 6 = Default 9 = Max		#endregion		public Zip()		{		}		#region Properties				public string Password		{			get {return m_Password;}			set {m_Password = value;}		}		public string Comment		{			get {return m_Comment;}			set {m_Comment = value;}		}		public string [] FilesToZip		{			get {return m_FilesToZip;}			set {m_FilesToZip = value;	}		}		public string ZipFileName		{			get {return m_ZipFileName;}			set {m_ZipFileName = value;}		}		public string Date		{			get {return m_Date;}			set {m_Date = value;}		}		public string RootDir		{			get {return m_RootDir;}			set {m_RootDir = value;}		}				public string TempDir		{			get {return m_TempDir;}			set {m_TempDir = value;}		}		public TempDirectorySpecifiedEnum Temp		{			get {return m_Temp;}			set {m_Temp = value;}		}//		public int Suffix//		{//			get {return m_Suffix;}//			set {m_Suffix = value;}//		}		public EncryptionSpecifiedEnum Encrypt		{			get {return m_EncryptionSpecified;}			set {m_EncryptionSpecified = value;}		}		public SystemFilesIgnoredEnum System		{			get {return m_SystemFilesIgnored;}			set {m_SystemFilesIgnored = value;}		}		public VolumeLabelStoredEnum Volume		{			get {return m_VolumeLabelStored;}			set {m_VolumeLabelStored = value;}		}		public ExtraAttributesExcludedEnum Extra		{			get {return m_ExtraAttributesExcluded;}			set {m_ExtraAttributesExcluded = value;}		}		public DirectoryEntriesIgnoredEnum NoDirEntries		{			get {return m_DirEntriesIgnored;}			set {m_DirEntriesIgnored = value;}		}		public ExcludeDateEnum ExcludeDate		{			get {return m_ExcludeDate;}			set {m_ExcludeDate = value;}		}		public IncludeDateEnum IncludeDate		{			get {return m_IncludeDate;}			set {m_IncludeDate = value;}		}		public VerboseMessagesEnum Verbose		{			get {return m_VerboseMessages;}			set {m_VerboseMessages = value;}		}		public QuietMessageseEnum Quiet		{			get {return m_QuietMessages;}			set {m_QuietMessages = value;}		}		public CRLF_LFTranslateEnum CRLF_LF		{			get {return m_CRLF_LFTranslate;}			set {m_CRLF_LFTranslate = value;}		}		public LF_CRLFTranslateEnum LF_CRLF		{			get {return m_LF_CRLFTranslate;}			set {m_LF_CRLFTranslate = value;}		}		public JunkDirEnum JunkDir		{			get {return m_JunkDir;}			set {m_JunkDir = value;}		}		public GrowZipFileEnum Grow		{			get {return m_GrowZipFile;}			set {m_GrowZipFile = value;}		}		public ForceDOSNamesEnum Force		{			get {return m_ForceDOSNames;}			set {m_ForceDOSNames = value;}		}		public MoveEnum Move		{			get {return m_Move;}			set {m_Move = value;}		}		public DeleteEntriesEnum DeleteEntries		{			get {return m_DeleteEntries;}			set {m_DeleteEntries = value;}		}		public UpdateEnum Update		{			get {return m_Update;}			set {m_Update = value;}		}		public FreshenEnum Freshen		{			get {return m_Freshen;}			set {m_Freshen = value;}		}		public JunkSFXPrefixEnum JunkSFX		{			get {return m_JunkSFXPrefix;}			set {m_JunkSFXPrefix = value;}		}		public LatestTimeEnum LatestTime		{			get {return m_LatestTime;}			set {m_LatestTime = value;}		}		public CommentEnum CommentOption		{			get {return m_CommentOption;}			set {m_CommentOption = value;}		}		public OffsetsEnum Offsets		{			get {return m_Offsets;}			set {m_Offsets = value;}		}

⌨️ 快捷键说明

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