648 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			648 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| /*********************************************************************************************
 | |
|  * Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
 | |
|  * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
 | |
|  * ------------------------------------------------------------------------------
 | |
|  * $Workfile: ZipFuncs.cs $     $Revision: 2 $
 | |
|  * $Author: Kathy $   $Date: 8/10/04 9:12a $
 | |
|  *
 | |
|  * $History: ZipFuncs.cs $
 | |
|  * 
 | |
|  * *****************  Version 2  *****************
 | |
|  * User: Kathy        Date: 8/10/04    Time: 9:12a
 | |
|  * Updated in $/LibSource/Utils
 | |
|  * force copy for backup of zip file on checks (was crashing)
 | |
|  * 
 | |
|  * *****************  Version 1  *****************
 | |
|  * User: Kathy        Date: 7/27/04    Time: 8:35a
 | |
|  * Created in $/LibSource/Utils
 | |
|  *********************************************************************************************/
 | |
| 
 | |
| using System;
 | |
| using System.Text;
 | |
| using System.IO;
 | |
| using System.Runtime.InteropServices;
 | |
| using System.Collections.Specialized;
 | |
| 
 | |
| namespace Utils
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// Zip and UnZip functions.
 | |
| 	/// </summary>
 | |
| 	public class ZipFuncs
 | |
| 	{
 | |
| 		[DllImport("Kernel32.DLL")]	public static extern uint GetDriveType(char[] lpRootPathName);
 | |
| 		private CDZipNET dzip;
 | |
| 		private CDUnZipNET duzip;
 | |
| 
 | |
| 		private string _strZipPathAndFile; // full path and zip file name
 | |
| 		private bool _CancelZip;
 | |
| 
 | |
| 		private bool _zipOnRemovable; // i.e. floppy disk
 | |
| 
 | |
| 		private int _ArchiveType; // Full or Partial
 | |
| 
 | |
| 		private string _strZipFileExcludeList; // what not to zip
 | |
| 
 | |
| 		private string _strComment; // user's zip comment
 | |
| 		private string _strFilesToArchive; // what to zip up
 | |
| 
 | |
| 		private string _strArcTitle; // user's archive title
 | |
| 
 | |
| 		private string _strDestPath; // place to unzip to
 | |
| 
 | |
| 		//#define DRIVE_UNKNOWN     0
 | |
| 		//#define DRIVE_NO_ROOT_DIR 1
 | |
| 		//#define DRIVE_REMOVABLE   2
 | |
| 		//#define DRIVE_FIXED       3
 | |
| 		//#define DRIVE_REMOTE      4
 | |
| 		//#define DRIVE_CDROM       5
 | |
| 		//#define DRIVE_RAMDISK     6
 | |
| 
 | |
| 		private enum DriveType
 | |
| 		{
 | |
| 			DRIVE_UNKNOWN=0,
 | |
| 			DRIVE_NO_ROOT_DIR,
 | |
| 			DRIVE_REMOVABLE,
 | |
| 			DRIVE_FIXED,
 | |
| 			DRIVE_REMOTE,
 | |
| 			DRIVE_CDROM,
 | |
| 			DRIVE_RAMDISK
 | |
| 		}
 | |
| 
 | |
| 		private enum ZipTypes
 | |
| 		{
 | |
| 			Full=0,
 | |
| 			Partial=1
 | |
| 		}
 | |
| 
 | |
| 		// Contstructor for an existing Zip file
 | |
| 		public ZipFuncs(string iZipFile)
 | |
| 		{
 | |
| 			_strZipPathAndFile = iZipFile;
 | |
| 			SetupDestinationPath();
 | |
| 			_CancelZip = false;
 | |
| 			// populate local variables with Zip file's 
 | |
| 			// Title, Archive type, and Comment
 | |
| 			GetZipCommentInformation();
 | |
| 		}
 | |
| 
 | |
| 		// Constructor for a new Zip file
 | |
| 		public ZipFuncs()
 | |
| 		{
 | |
| 			_strZipPathAndFile = "";
 | |
| 			_CancelZip = false;
 | |
| 		}
 | |
| 
 | |
| 		//public properties
 | |
| 		public string strArcTitle
 | |
| 		{
 | |
| 			get { return _strArcTitle; }
 | |
| 			set {_strArcTitle = value.ToString(); }
 | |
| 		}
 | |
| 
 | |
| 		public string strZipPathAndFile
 | |
| 		{
 | |
| 			get { return _strZipPathAndFile;}
 | |
| 			set 
 | |
| 			{ 
 | |
| 				_strZipPathAndFile = value.ToString();
 | |
| 				SetupDestinationPath();
 | |
| 				// populate local variables with Zip file's 
 | |
| 				// Title, Archive type, and Comment
 | |
| 				GetZipCommentInformation();
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public string strUnZipDestPath
 | |
| 		{
 | |
| 			get { return _strDestPath; }
 | |
| 			set
 | |
| 			{
 | |
| 				_strDestPath = value.ToString();
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public bool CancelZip
 | |
| 		{
 | |
| 			get { return _CancelZip;}
 | |
| 			set { _CancelZip = value; }
 | |
| 		}
 | |
| 
 | |
| 		public bool zipOnRemovable
 | |
| 		{
 | |
| 			get { return _zipOnRemovable;}
 | |
| 			set { _zipOnRemovable = value;}
 | |
| 		}
 | |
| 
 | |
| 		public int ArchiveType
 | |
| 		{
 | |
| 			get { return _ArchiveType;}
 | |
| 			set { _ArchiveType = value; }
 | |
| 		}
 | |
| 
 | |
| 		public string strFilesToArchive
 | |
| 		{
 | |
| 			get { return _strFilesToArchive; }
 | |
| 			set { _strFilesToArchive = value.ToString(); }
 | |
| 		}
 | |
| 
 | |
| 		public string strZipFileExcludeList
 | |
| 		{
 | |
| 			get { return _strZipFileExcludeList; }
 | |
| 			set { _strZipFileExcludeList = value.ToString(); }
 | |
| 		}
 | |
| 
 | |
| 		public string strComment
 | |
| 		{
 | |
| 			get {return _strComment;}
 | |
| 			set 
 | |
| 			{
 | |
| //				if (value == null)
 | |
| //					_strComment = "";
 | |
| //				else
 | |
| 					_strComment = (value == null)?"":value.ToString(); 
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public bool CreateNewZipFile()
 | |
| 		{
 | |
| 			return _GenerateZipFile(true);
 | |
| 		}
 | |
| 
 | |
| 		public bool UpdateZipFile()
 | |
| 		{
 | |
| 			return _GenerateZipFile(false);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		private bool _GenerateZipFile(bool NewFileFile)
 | |
| 		{
 | |
| 			StringBuilder cmntTxt = new StringBuilder();
 | |
| 			bool rtnval;
 | |
| 			ZipFuncsDlg zpDlg = new ZipFuncsDlg();
 | |
| 
 | |
| 			dzip = new CDZipNET();
 | |
| 			_CancelZip = false;
 | |
| 			_zipOnRemovable = IsARemovableDisk();
 | |
| 
 | |
| 			// Setup DynaZip
 | |
| 
 | |
| 			// build comment field text
 | |
| 			cmntTxt.Append(_strArcTitle);
 | |
| 			cmntTxt.Append("\n");
 | |
| 			if (_ArchiveType == (int)ZipFuncs.ZipTypes.Partial)
 | |
| 			{
 | |
| 				// Do not recurse the sub directories when doing a partial archive
 | |
| 				cmntTxt.Append("PARTIAL\n");
 | |
| 				dzip.RecurseFlag = false;
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				cmntTxt.Append("FULL\n");
 | |
| 				dzip.RecurseFlag = true;
 | |
| 			}
 | |
| 			cmntTxt.Append(_strComment);
 | |
| 			dzip.AddCommentFlag = true;
 | |
| 			dzip.Comment = cmntTxt.ToString(); // zip file comment string
 | |
| 
 | |
| 			// CompressionFactors 10 - 19 are not compatable with older zip programs
 | |
| 			// (i.e WinZip 7.0)
 | |
| 			dzip.CompressionFactor = 9; // maxium compression
 | |
| 			dzip.ExcludeFollowingFlag = true;
 | |
| 			dzip.ExcludeFollowing = _strZipFileExcludeList;
 | |
| 			dzip.ItemList = _strFilesToArchive;
 | |
| 			dzip.LargeZIPFilesFlag = true;
 | |
| 			dzip.ZIPFile = _strZipPathAndFile; // zip file name with full path
 | |
| 			
 | |
| 			// Is the target zip path on a removable dirve?
 | |
| 			if (_zipOnRemovable)
 | |
| 			{
 | |
| 				dzip.MultiVolumeControl = CDZipNET.MULTIVOLCONTROL.MV_USEMULTI;
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				dzip.MultiVolumeControl = CDZipNET.MULTIVOLCONTROL.MV_NONE;
 | |
| 			}
 | |
| 
 | |
| 			// setup status bars
 | |
| 			dzip.MajorStatusFlag = true;
 | |
| 			dzip.MinorStatusFlag = true;
 | |
| 			dzip.ZipMajorStatus += new CDZipNET.OnZipMajorStatus(zpDlg.ZipMajorStatus_event);
 | |
| 			dzip.ZipMinorStatus += new CDZipNET.OnZipMinorStatus(zpDlg.ZipMinorStatus_event);
 | |
| 			_CancelZip = false;
 | |
| 
 | |
| 			zpDlg.Show();
 | |
| 
 | |
| 			// Do the Zip function
 | |
| 			if (!NewFileFile)
 | |
| 				dzip.ActionDZ = CDZipNET.DZACTION.ZIP_UPDATE; //update existing zip file
 | |
| 			else
 | |
| 				dzip.ActionDZ = CDZipNET.DZACTION.ZIP_ADD; // create new zip file
 | |
| 
 | |
| 			rtnval = (zpDlg.DialogResult == System.Windows.Forms.DialogResult.OK);
 | |
| 			zpDlg.Dispose();
 | |
| 	
 | |
| 			// check for errors during the zip function.
 | |
| 			if (rtnval)
 | |
| 				rtnval = CheckZipErrorCode();
 | |
| 
 | |
| 			// if we are zipping to a different location than the current procedure
 | |
| 			// set directory, we always want to return false so that this newly 
 | |
| 			// created zip file is not placed in the VE-PROMS tree.
 | |
| 			if (_zipOnRemovable || ZipFileNotInCurrentDirectory())
 | |
| 				rtnval = false;
 | |
| 
 | |
| 			return rtnval;
 | |
| 		}
 | |
| 
 | |
| 		// If there is a problem with the Zip file header, try to fix it.
 | |
| 		private bool FixZipFile()
 | |
| 		{
 | |
| 			bool rtnval;
 | |
| 			string ZipFileName = _strZipPathAndFile;
 | |
| 			string backupName = ZipFileName.Substring(0,ZipFileName.LastIndexOf(".")) + ".bku";
 | |
| 			_CancelZip = false;
 | |
| 			// save a copy of the zip file
 | |
| 			File.Copy(ZipFileName,backupName,true);
 | |
| 			dzip.FixFlag = true;
 | |
| 			dzip.ActionDZ = CDZipNET.DZACTION.ZIP_UPDATE;
 | |
| 			if (dzip.ErrorCode == CDZipNET.ZIPRESPONSE.ZE_FORM )
 | |
| 			{
 | |
| 				dzip.FixFlag = false;
 | |
| 				dzip.FixHarderFlag = true;
 | |
| 				dzip.ActionDZ = CDZipNET.DZACTION.ZIP_UPDATE;
 | |
| 				dzip.FixHarderFlag = false;
 | |
| 			}
 | |
| 			rtnval = (dzip.ErrorCode == 0); // 0 = success
 | |
| 
 | |
| 			if (!rtnval)
 | |
| 			{
 | |
| 				// not successful, so restore from the backup file
 | |
| 				File.Copy(backupName,ZipFileName,true);
 | |
| 			}
 | |
| 			File.Delete(backupName); // delete the backup file
 | |
| 			return rtnval;
 | |
| 		}
 | |
| 
 | |
| 		private bool CheckZipErrorCode()
 | |
| 		{
 | |
| 			bool rtnval;
 | |
| 
 | |
| 			switch (dzip.ErrorCode)
 | |
| 			{
 | |
| 				case CDZipNET.ZIPRESPONSE.ZE_OK: // ZE_OK
 | |
| 					rtnval = true;
 | |
| 					break;
 | |
| 				case CDZipNET.ZIPRESPONSE.ZE_FORM: // ZE_FORM
 | |
| 				case CDZipNET.ZIPRESPONSE.ZE_TEST: // ZE_TEST
 | |
| 					// Internal organization of ZIP file is dammaged.
 | |
| 					// Try using the Fix function
 | |
| 					// note that you cannot do the fix on removable media
 | |
| 					if (!zipOnRemovable)
 | |
| 						rtnval = FixZipFile();
 | |
| 					else
 | |
| 						rtnval = false;
 | |
| 					break;
 | |
| 				case CDZipNET.ZIPRESPONSE.ZE_ABORT: // ZE_ABORT
 | |
| 					rtnval = false;
 | |
| 					break;
 | |
| 				default:
 | |
| 					rtnval = false;
 | |
| 					break;
 | |
| 			}
 | |
| 			return rtnval;
 | |
| 		}
 | |
| 
 | |
| 		// If there is a problem with the Zip file header, try to fix it.
 | |
| 		private bool FixUnZipFile()
 | |
| 		{
 | |
| 			bool rtnval;
 | |
| 			string ZipFileName = _strZipPathAndFile;
 | |
| 			string backupName = ZipFileName.Substring(0,ZipFileName.LastIndexOf(".")) + ".bku";
 | |
| 			_CancelZip = false;
 | |
| 			dzip = new CDZipNET();
 | |
| 			dzip.ZIPFile = duzip.ZIPFile;
 | |
| 			// save a copy of the zip file
 | |
| 			File.Copy(ZipFileName,backupName,true);
 | |
| 			dzip.FixFlag = true;
 | |
| 			dzip.ActionDZ = CDZipNET.DZACTION.ZIP_UPDATE;
 | |
| 			if (dzip.ErrorCode == CDZipNET.ZIPRESPONSE.ZE_FORM)
 | |
| 			{
 | |
| 				dzip.FixFlag = false;
 | |
| 				dzip.FixHarderFlag = true;
 | |
| 				dzip.ActionDZ = CDZipNET.DZACTION.ZIP_UPDATE;
 | |
| 				dzip.FixHarderFlag = false;
 | |
| 			}
 | |
| 			rtnval = (dzip.ErrorCode == CDZipNET.ZIPRESPONSE.ZE_OK); // 0 = success
 | |
| 			dzip.Dispose();
 | |
| 
 | |
| 			if (!rtnval)
 | |
| 			{
 | |
| 				// not successful, so restore from the backup file
 | |
| 				File.Copy(backupName,ZipFileName,true);
 | |
| 			}
 | |
| 			File.Delete(backupName); // delete the backup file
 | |
| 			return rtnval;
 | |
| 		}
 | |
| 
 | |
| 		private bool CheckUnZipErrorCode()
 | |
| 		{
 | |
| 			bool rtnval;
 | |
| 			switch (duzip.ErrorCode)
 | |
| 			{
 | |
| 				case CDUnZipNET.UNZIPRESPONSE.UE_OK: // UE_OK
 | |
| 					rtnval = true;
 | |
| 					break;
 | |
| 				case CDUnZipNET.UNZIPRESPONSE.UE_STRUCT: // UE_STRUCT
 | |
| 					// Internal organization of ZIP file is dammaged.
 | |
| 					// Try using the Fix function
 | |
| 					rtnval = FixUnZipFile();
 | |
| 					break;
 | |
| 				case CDUnZipNET.UNZIPRESPONSE.UE_ABORT: // UE_ABORT
 | |
| 				case CDUnZipNET.UNZIPRESPONSE.UE_CANCEL: // UE_CANCEL
 | |
| 					rtnval = false;
 | |
| 					break;
 | |
| 				default:
 | |
| 					rtnval = false;
 | |
| 					break;
 | |
| 			}
 | |
| 			return rtnval;
 | |
| 		}
 | |
| 
 | |
| 		public bool AddZipCommentInformation()
 | |
| 		{
 | |
| 			StringBuilder cmntTxt = new StringBuilder();
 | |
| 			dzip = new CDZipNET();
 | |
| 			_CancelZip = false;
 | |
| 			// Save the current attributes of the zip file, update zip file
 | |
| 			// and then restore attributes
 | |
| 			// - the zip file might be readonly
 | |
| 			System.IO.FileAttributes saveAttribs = File.GetAttributes(_strZipPathAndFile);
 | |
| 			File.SetAttributes(_strZipPathAndFile,FileAttributes.Normal);
 | |
| 			// add comment
 | |
| 			cmntTxt.Append(_strArcTitle);
 | |
| 			cmntTxt.Append("\n");
 | |
| 			if (_ArchiveType == (int)ZipTypes.Partial)
 | |
| 				cmntTxt.Append("PARTIAL\n");
 | |
| 			else
 | |
| 				cmntTxt.Append("FULL\n");
 | |
| 			cmntTxt.Append(_strComment);
 | |
| 			dzip.AddCommentFlag = true;
 | |
| 			dzip.Comment = cmntTxt.ToString();
 | |
| 			dzip.ZIPFile = _strZipPathAndFile; // zip file name with full path
 | |
| 			dzip.ActionDZ = CDZipNET.DZACTION.ZIP_ADD;
 | |
| 			File.SetAttributes(_strZipPathAndFile,saveAttribs);
 | |
| 			return CheckZipErrorCode();
 | |
| 		}
 | |
| 
 | |
| 		public bool GetZipCommentInformation()
 | |
| 		{
 | |
| 			int x;
 | |
| 			string ZipComment;
 | |
| 			string strArcType;
 | |
| 			_CancelZip = false;
 | |
| 			if (!(File.Exists(_strZipPathAndFile)))
 | |
| 				return false; // !!! no zip file
 | |
| 			duzip = new CDUnZipNET();
 | |
| 			duzip.ZIPFile = _strZipPathAndFile; // zip file name with full path
 | |
| 			duzip.ActionDZ = CDUnZipNET.DUZACTION.UNZIP_GETCOMMENTSIZE;
 | |
| 			if (!CheckUnZipErrorCode())
 | |
| 				return false; // error
 | |
| 			if (duzip.ReturnCount <= 0)
 | |
| 				return false; // no comment informat
 | |
| 			duzip.ActionDZ = CDUnZipNET.DUZACTION.UNZIP_GETCOMMENT;
 | |
| 			ZipComment = duzip.ReturnString;
 | |
| 			x = ZipComment.IndexOf("\n");
 | |
| 			if (x < 0) return false; // nothing in comment
 | |
| 			_strArcTitle = ZipComment.Substring(0,x);
 | |
| 			ZipComment = ZipComment.Substring(x+1);
 | |
| 			x = ZipComment.IndexOf("\n");
 | |
| 			if (x > 0)
 | |
| 			{
 | |
| 				strArcType = ZipComment.Substring(0,x);
 | |
| 				if (strArcType.Equals("FULL"))
 | |
| 					_ArchiveType = (int)ZipTypes.Full;
 | |
| 				else
 | |
| 					_ArchiveType = (int)ZipTypes.Partial;
 | |
| 				_strComment = ZipComment.Substring(x+1);
 | |
| 			}
 | |
| 			else
 | |
| 			{
 | |
| 				// at this point, default to a full archive
 | |
| 				_ArchiveType = (int)ZipTypes.Full;
 | |
| 				// default to path and filename for the comment
 | |
| 				_strComment = _strZipPathAndFile;
 | |
| 			}
 | |
| 			return true;
 | |
| 		}
 | |
| 
 | |
| 		private bool IsARemovableDisk()
 | |
| 		{
 | |
| 			uint DrvType;
 | |
| 			string tmp = _strZipPathAndFile.Substring(0,2);
 | |
| 			DrvType = GetDriveType(tmp.ToCharArray());
 | |
| 			return (DrvType.Equals((uint)DriveType.DRIVE_REMOVABLE));
 | |
| 		}
 | |
| 
 | |
| 		private bool ZipFileNotInCurrentDirectory()
 | |
| 		{
 | |
| 			string curdir = Directory.GetCurrentDirectory();
 | |
| 			string tmpstr = _strZipPathAndFile.ToUpper();
 | |
| 			if (tmpstr.EndsWith(".ZIP"))
 | |
| 				tmpstr = tmpstr.Substring(0,tmpstr.LastIndexOf("."));
 | |
| 			return tmpstr.Equals(curdir);
 | |
| 		}
 | |
| 
 | |
| 		public bool UnzipFromZipFile()
 | |
| 		{
 | |
| 			return _UnzipFromZipFile(true); // unzip from the archive
 | |
| 		}
 | |
| 
 | |
| 		public bool TestTheZipFile()
 | |
| 		{
 | |
| 			return _UnzipFromZipFile(false); // test the archive
 | |
| 		}
 | |
| 
 | |
| 		private bool _UnzipFromZipFile(bool ExtractFiles)
 | |
| 		{
 | |
| 			StringBuilder cmntTxt = new StringBuilder();
 | |
| 			bool rtnval;
 | |
| 			ZipFuncsDlg zpDlg = new ZipFuncsDlg();
 | |
| 			//			StringBuilder cmntTxt = new StringBuilder();
 | |
| 			//			VEO_Archive arc = (VEO_Archive) _CurObj;
 | |
| 			duzip = new CDUnZipNET();
 | |
| 			_zipOnRemovable = IsARemovableDisk();
 | |
| 
 | |
| 			// Setup DynaZip
 | |
| 
 | |
| 			// zip file name with full path
 | |
| 			duzip.ZIPFile = _strZipPathAndFile;
 | |
| 
 | |
| 			//root of drive letter
 | |
| //			duzip.Destination = Path.GetPathRoot(_strZipPathAndFile); 
 | |
| 			duzip.Destination = _strDestPath; 
 | |
| 
 | |
| 			// what files to get from the zip file
 | |
| 			duzip.Filespec = "*.*"; // get all files
 | |
| 
 | |
| 			//Replace - this combination of flags results in unzipping all files whether
 | |
| 			//          they were changed or not.
 | |
| 			duzip.FreshenFlag = false;
 | |
| 			duzip.UpdateFlag = false;
 | |
| 
 | |
| 			// Make a reference to a single byte to avoid null access
 | |
| 			duzip.MemoryBlock = new Byte[1];
 | |
| 
 | |
| 			// true = Overwrite non-read only files without asking
 | |
| 			duzip.OverwriteFlag = true;
 | |
| 
 | |
| 			// true = proceed to unzip by traversing into folders
 | |
| 			duzip.RecurseFlag = true;
 | |
| 
 | |
| 			duzip.UnzipSubOptions = CDUnZipNET.UNZIPSUBOPTION.USO_NONE;
 | |
| 
 | |
| 			// set this option to allow the overwriting of ReadOnly Files.
 | |
| 			// this option only has meaning when the OverwriteFlag property
 | |
| 			// is set to true
 | |
| 			duzip.UnzipSubOptions |= CDUnZipNET.UNZIPSUBOPTION.USO_OVERWRITE_RO;
 | |
| 
 | |
| 			// allow the MinorCancel event to respond to cancel requests
 | |
| 			duzip.UnzipSubOptions |= CDUnZipNET.UNZIPSUBOPTION.USO_MINORCANCEL;
 | |
| 
 | |
| 			// debug
 | |
| //			duzip.DiagnosticFlag = true;
 | |
| //			duzip.UnzipSubOptions |= CDUnZipNET.UNZIPSUBOPTION.USO_LOGZIPRESULTS;
 | |
| 
 | |
| 			// setup status bars
 | |
| 			duzip.MajorStatusFlag = true;
 | |
| 			duzip.MinorStatusFlag = true;
 | |
| 			duzip.MessageCallbackFlag = true;
 | |
| 			duzip.UnZipMajorStatus += new CDUnZipNET.OnUnZipMajorStatus(zpDlg.ZipMajorStatus_event);
 | |
| 			duzip.UnZipMinorStatus += new CDUnZipNET.OnUnZipMinorStatus(zpDlg.ZipMinorStatus_event);
 | |
| 
 | |
| 			_CancelZip = false;
 | |
| 
 | |
| 			zpDlg.Show(); // display the status dialog
 | |
| 
 | |
| 			if (!ExtractFiles)
 | |
| 				duzip.TestFlag = true; // don't extract, only test each item in zip file
 | |
| 
 | |
| 			// Do the UnZip function
 | |
| 			duzip.ActionDZ = CDUnZipNET.DUZACTION.UNZIP_EXTRACT;
 | |
| 			rtnval = (zpDlg.DialogResult == System.Windows.Forms.DialogResult.OK);
 | |
| 			zpDlg.Dispose();
 | |
| 	
 | |
| 			// check for errors during the unzip function.
 | |
| 			if (!CheckUnZipErrorCode())
 | |
| 					return false; // error
 | |
| 			if (duzip.ReturnCount <= 0)
 | |
| 				return false; // nothing unzipped
 | |
| 
 | |
| 			return rtnval;
 | |
| 		}
 | |
| 
 | |
| 		public StringCollection ZipFileContents()
 | |
| 		{
 | |
| 			StringCollection ZipFileList = new StringCollection();
 | |
| 			StringBuilder cmntTxt = new StringBuilder();
 | |
| 			duzip = new CDUnZipNET();
 | |
| 			_zipOnRemovable = false;
 | |
| 
 | |
| 			// Setup DynaZip
 | |
| 
 | |
| 			// zip file name with full path
 | |
| 			duzip.ZIPFile = _strZipPathAndFile;
 | |
| 
 | |
| 			// what files to get from the zip file
 | |
| 			duzip.Filespec = "*.*"; // get all files
 | |
| 
 | |
| 			//Replace - this combination of flags results in unzipping all files whether
 | |
| 			//          they were changed or not.
 | |
| 			duzip.FreshenFlag = false;
 | |
| 			duzip.UpdateFlag = false;
 | |
| 
 | |
| 			// Make a reference to a single byte to avoid null access
 | |
| 			duzip.MemoryBlock = new Byte[1];
 | |
| 
 | |
| 			_CancelZip = false;
 | |
| 
 | |
| 			// Do the UnZip function
 | |
| 			duzip.ActionDZ = CDUnZipNET.DUZACTION.UNZIP_COUNTALLZIPMEMBERS;
 | |
| 			int numItems = duzip.ReturnCount;
 | |
| 			string str_tmpDate;
 | |
| 			string str_tmpFileName;
 | |
| 			for (int i=0;i<numItems;i++)
 | |
| 			{
 | |
| 				duzip.ActionDZ = CDUnZipNET.DUZACTION.UNZIP_GETNEXTZIPINFO;
 | |
| 				str_tmpDate = duzip.zi_DateTime;
 | |
| 				str_tmpFileName = duzip.zi_FileName;
 | |
| 				ZipFileList.Add(str_tmpDate + "!" + str_tmpFileName);
 | |
| 			}
 | |
| 
 | |
| 			return ZipFileList;
 | |
| 		}
 | |
| 
 | |
| 		private void SetupDestinationPath()
 | |
| 		{
 | |
| 			string strDestPath = "";
 | |
| 			duzip = new CDUnZipNET();
 | |
| 			_zipOnRemovable = false;
 | |
| 
 | |
| 			// Setup DynaZip
 | |
| 
 | |
| 			// zip file name with full path
 | |
| 			duzip.ZIPFile = _strZipPathAndFile;
 | |
| 
 | |
| 			strDestPath = Path.GetDirectoryName(_strZipPathAndFile);
 | |
| 			strDestPath = strDestPath.ToUpper();
 | |
| 
 | |
| 			// what files to get from the zip file
 | |
| 			duzip.Filespec = "proc.ini"; // get proc.ini file
 | |
| 
 | |
| 			//Replace - this combination of flags results in unzipping all files whether
 | |
| 			//          they were changed or not.
 | |
| 			duzip.FreshenFlag = false;
 | |
| 			duzip.UpdateFlag = false;
 | |
| 			duzip.RecurseFlag = true; // so that it can get with or without path
 | |
| 
 | |
| 			// Make a reference to a single byte to avoid null access
 | |
| 			duzip.MemoryBlock = new Byte[1];
 | |
| 
 | |
| 			_CancelZip = false;
 | |
| 
 | |
| 			// Do the UnZip function
 | |
| 			int numItems = 0;
 | |
| 			if (File.Exists(_strZipPathAndFile))
 | |
| 			{
 | |
| 				duzip.ActionDZ = CDUnZipNET.DUZACTION.UNZIP_COUNTNAMEDZIPMEMBERS;
 | |
| 				// See if we found the file
 | |
| 				numItems = duzip.ReturnCount;
 | |
| 			}
 | |
| 			string str_tmpFileName = "";
 | |
| //			string curdir = Directory.GetCurrentDirectory();
 | |
| //			DestPath = curdir.ToUpper();
 | |
| 			if (numItems > 0)
 | |
| 			{
 | |
| 				// Adjust the destination path based on the full or partial
 | |
| 				// path in the zip file
 | |
| 				char [] trmchar = {'\\'};
 | |
| 				duzip.ActionDZ = CDUnZipNET.DUZACTION.UNZIP_GETNEXTNAMEDZIPINFO;
 | |
| 				str_tmpFileName = duzip.zi_FileName;
 | |
| 				// trim off the file name
 | |
| 				str_tmpFileName = str_tmpFileName.ToUpper();
 | |
| 				str_tmpFileName = str_tmpFileName.Substring(0,str_tmpFileName.LastIndexOf("PROC.INI"));
 | |
| 				// trim off any backslash
 | |
| 				str_tmpFileName = str_tmpFileName.TrimEnd(trmchar);
 | |
| 				str_tmpFileName = str_tmpFileName.ToUpper();
 | |
| 				if (str_tmpFileName.Length > 0)
 | |
| 				{
 | |
| 					if (strDestPath.LastIndexOf(str_tmpFileName) > 0)
 | |
| 						strDestPath = strDestPath.Substring(0,strDestPath.Length - str_tmpFileName.Length);
 | |
| 				}
 | |
| 			}
 | |
| 			_strDestPath = strDestPath;
 | |
| 			return;
 | |
| 		}
 | |
| 	}
 | |
| }
 |