Commit for development environment setup
This commit is contained in:
647
PROMS/ReferencedObjectsOld/LibSource/Utils/ZipFuncs.cs
Normal file
647
PROMS/ReferencedObjectsOld/LibSource/Utils/ZipFuncs.cs
Normal file
@@ -0,0 +1,647 @@
|
||||
/*********************************************************************************************
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user