340 lines
11 KiB
C#
340 lines
11 KiB
C#
using Data;
|
|
using System;
|
|
using System.IO;
|
|
using System.Drawing;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using System.ComponentModel;
|
|
using System.Windows.Forms;
|
|
|
|
internal class Class34_Zip
|
|
{
|
|
string _baseromPath = Environment.GetEnvironmentVariable("TEMP");
|
|
string _zipPath = "";
|
|
int CurrentFileIndex = 0;
|
|
private Class10_settings Class10_0;
|
|
bool CanLoadC10 = false;
|
|
frmUnZIP frmUnZIP_0;
|
|
|
|
public Class34_Zip()
|
|
{
|
|
|
|
}
|
|
|
|
public void AddClass10(ref Class10_settings Class10_1)
|
|
{
|
|
Class10_0 = Class10_1;
|
|
CanLoadC10 = true;
|
|
}
|
|
|
|
public void ExtractZip()
|
|
{
|
|
/*while (File.Exists(_zipPath))
|
|
{
|
|
CurrentFileIndex++;
|
|
SetZipPath();
|
|
}*/
|
|
|
|
try
|
|
{
|
|
SetZipPath();
|
|
int Chechh = GetPackgeChecksum();
|
|
if (!CanLoadC10 || (CanLoadC10 && Chechh != this.Class10_0.LastPackageChecksum))
|
|
{
|
|
if (!File.Exists(_zipPath)) File.Create(_zipPath).Dispose();
|
|
File.WriteAllBytes(_zipPath, Properties.Resources.Packages);
|
|
if (CanLoadC10) this.Class10_0.LastPackageChecksum = Chechh;
|
|
}
|
|
//UnZip(_baseromPath);
|
|
}
|
|
catch
|
|
{
|
|
this.Class10_0.frmMain_0.LogThis("Unzipper - Unable to Overwrite Package.zip:");
|
|
}
|
|
}
|
|
|
|
private int GetPackgeChecksum()
|
|
{
|
|
int ReturnSum = -1;
|
|
if (File.Exists(_zipPath))
|
|
{
|
|
byte[] AllBytes = File.ReadAllBytes(_zipPath);
|
|
|
|
for (int i = 0; i < AllBytes.Length; i++)
|
|
{
|
|
ReturnSum += AllBytes[i];
|
|
if (ReturnSum > 65535) ReturnSum -= 65535;
|
|
}
|
|
}
|
|
return ReturnSum;
|
|
}
|
|
|
|
void SetZipPath()
|
|
{
|
|
_zipPath = Environment.GetEnvironmentVariable("TEMP") + @"\Packages" + CurrentFileIndex + ".zip";
|
|
}
|
|
|
|
public void RemoveZip()
|
|
{
|
|
try
|
|
{
|
|
while (File.Exists(_zipPath))
|
|
{
|
|
File.Delete(_zipPath);
|
|
if (CurrentFileIndex > 0) CurrentFileIndex--;
|
|
SetZipPath();
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
public Shell32.Folder GetShell32NameSpaceFolder(Object folder)
|
|
{
|
|
Type shellAppType = Type.GetTypeFromProgID("Shell.Application");
|
|
|
|
Object shell = Activator.CreateInstance(shellAppType);
|
|
return (Shell32.Folder)shellAppType.InvokeMember("NameSpace",
|
|
System.Reflection.BindingFlags.InvokeMethod, null, shell, new object[] { folder });
|
|
}
|
|
|
|
public void UnZipFile(string folderPath)
|
|
{
|
|
try
|
|
{
|
|
if (!File.Exists(_zipPath))
|
|
{
|
|
throw new FileNotFoundException();
|
|
}
|
|
if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath);
|
|
|
|
Shell32.Folder destinationFolder = GetShell32NameSpaceFolder(folderPath);
|
|
Shell32.Folder sourceFile = GetShell32NameSpaceFolder(_zipPath);
|
|
|
|
foreach (var file in sourceFile.Items())
|
|
{
|
|
destinationFolder.CopyHere(file, 4 | 16);
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
public void UnZipFile(string folderPath, string Filename)
|
|
{
|
|
try
|
|
{
|
|
if (!File.Exists(_zipPath))
|
|
{
|
|
throw new FileNotFoundException();
|
|
}
|
|
if (!Directory.Exists(folderPath + @"\" + Filename)) Directory.CreateDirectory(folderPath + @"\" + Filename);
|
|
|
|
if (CanLoadC10)
|
|
{
|
|
frmUnZIP_0 = new frmUnZIP();
|
|
frmUnZIP_0.Show();
|
|
frmUnZIP_0.TopMost = true;
|
|
}
|
|
|
|
Shell32.Folder destinationFolder = GetShell32NameSpaceFolder(folderPath);
|
|
Shell32.Folder sourceFile = GetShell32NameSpaceFolder(_zipPath);
|
|
|
|
bool FoundFile = false;
|
|
int MaxItems = sourceFile.Items().Count;
|
|
int CurrentIndex = 0;
|
|
|
|
foreach (Shell32.FolderItem file in sourceFile.Items())
|
|
{
|
|
int Percent = (int) (((double) CurrentIndex * 100.0) / (double) MaxItems);
|
|
if (CanLoadC10) frmUnZIP_0.SetPercent(Percent);
|
|
if (file.Name != null)
|
|
{
|
|
if (file.Name != string.Empty && Filename != string.Empty)
|
|
{
|
|
if (file.Name == Filename)
|
|
{
|
|
destinationFolder.CopyHere(file, 4 | 16);
|
|
FoundFile = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
CurrentIndex++;
|
|
}
|
|
|
|
if (!FoundFile) throw new FileNotFoundException();
|
|
}
|
|
catch { }
|
|
|
|
if (CanLoadC10)
|
|
{
|
|
if (frmUnZIP_0 != null)
|
|
{
|
|
frmUnZIP_0.Dispose();
|
|
frmUnZIP_0 = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
public byte[] UnZipSilent(string FilenameInZIP, string FnameExtracted)
|
|
{
|
|
byte[] ReturningByte = new byte[] { };
|
|
string BufFilePath = Application.StartupPath + @"\" + FilenameInZIP + @"\" + FnameExtracted;
|
|
|
|
//Unzip First if file do no exist
|
|
if (!File.Exists(BufFilePath)) UnZipFile(Application.StartupPath, FilenameInZIP);
|
|
|
|
//Get Datas
|
|
if (File.Exists(BufFilePath))
|
|
{
|
|
ReturningByte = File.ReadAllBytes(BufFilePath);
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("NOT loaded:" + FnameExtracted);
|
|
throw new FileNotFoundException();
|
|
}
|
|
|
|
return ReturningByte;
|
|
}
|
|
|
|
public void ZipFile(string ThisFile, string NameInZIP)
|
|
{
|
|
try
|
|
{
|
|
if (!File.Exists(ThisFile))
|
|
{
|
|
throw new FileNotFoundException();
|
|
}
|
|
|
|
//Create Empty folder that only have the specific file in it
|
|
string Zippingfolder = Application.StartupPath + @"\ZippingFolder";
|
|
if (!Directory.Exists(Zippingfolder)) Directory.CreateDirectory(Zippingfolder);
|
|
|
|
//Copy File to Empty Zipping Folder
|
|
File.Create(Zippingfolder + @"\" + NameInZIP).Dispose();
|
|
File.WriteAllBytes(Zippingfolder + @"\" + NameInZIP, File.ReadAllBytes(ThisFile));
|
|
|
|
// Create empty archive
|
|
if (!File.Exists(_zipPath))
|
|
{
|
|
//File.Create(_zipPath).Dispose();
|
|
byte[] emptyArchiveContent = new byte[] { 80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
|
FileStream fs = File.Create(_zipPath);
|
|
fs.Write(emptyArchiveContent, 0, emptyArchiveContent.Length);
|
|
fs.Flush();
|
|
fs.Close();
|
|
fs = null;
|
|
}
|
|
|
|
Shell32.Folder destinationFolder = GetShell32NameSpaceFolder(Zippingfolder);
|
|
Shell32.Folder sourceFile = GetShell32NameSpaceFolder(_zipPath);
|
|
sourceFile.CopyHere(destinationFolder.Items(), 4 | 16);
|
|
|
|
int Tries = 0;
|
|
bool FileIsZipped = false;
|
|
while (!FileIsZipped && Tries < (10 * 15))
|
|
{
|
|
foreach (Shell32.FolderItem file in sourceFile.Items())
|
|
{
|
|
if (file.Name == NameInZIP) FileIsZipped = true;
|
|
}
|
|
Thread.Sleep(100);
|
|
Tries++;
|
|
}
|
|
|
|
if (Directory.Exists(Zippingfolder)) Directory.Delete(Zippingfolder, true);
|
|
}
|
|
catch (Exception mess)
|
|
{
|
|
MessageBox.Show("ERROR: Could not ZIP File: " + Environment.NewLine + mess);
|
|
}
|
|
}
|
|
|
|
public void UnZipFileFromThisZIP(string ThisFile, string ThisZIP)
|
|
{
|
|
try
|
|
{
|
|
if (!File.Exists(ThisZIP))
|
|
{
|
|
throw new FileNotFoundException();
|
|
}
|
|
Shell32.Folder destinationFolder = GetShell32NameSpaceFolder(Application.StartupPath);
|
|
Shell32.Folder sourceFile = GetShell32NameSpaceFolder(ThisZIP);
|
|
|
|
foreach (Shell32.FolderItem file in sourceFile.Items())
|
|
{
|
|
if (file.Name == ThisFile) destinationFolder.CopyHere(file, 4 | 16);
|
|
}
|
|
}
|
|
catch (Exception mess)
|
|
{
|
|
MessageBox.Show("ERROR: Could not UNZIP File: " + Environment.NewLine + mess);
|
|
}
|
|
}
|
|
|
|
public string[] GetXDFInternalList()
|
|
{
|
|
string[] AllXDFFiles = new string[] { };
|
|
|
|
try
|
|
{
|
|
if (!File.Exists(_zipPath)) throw new FileNotFoundException();
|
|
|
|
Shell32.Folder destinationFolder = GetShell32NameSpaceFolder(Application.StartupPath);
|
|
Shell32.Folder sourceFile = GetShell32NameSpaceFolder(_zipPath);
|
|
foreach (Shell32.FolderItem file in sourceFile.Items())
|
|
{
|
|
if (file.Name == "XDF_Files")
|
|
{
|
|
destinationFolder.CopyHere(file, 4 | 16);
|
|
}
|
|
}
|
|
|
|
if (Directory.Exists(Application.StartupPath + @"\XDF_Files"))
|
|
{
|
|
AllXDFFiles = Directory.GetFiles(Application.StartupPath + @"\XDF_Files", "*.*", SearchOption.AllDirectories);
|
|
Directory.Delete(Application.StartupPath + @"\XDF_Files", true);
|
|
}
|
|
}
|
|
catch (Exception mess)
|
|
{
|
|
MessageBox.Show("ERROR: Could not get XDF files list: " + Environment.NewLine + mess);
|
|
}
|
|
|
|
return AllXDFFiles;
|
|
}
|
|
|
|
public string[] GetBINInternalList()
|
|
{
|
|
string[] AllXDFFiles = new string[] { };
|
|
|
|
try
|
|
{
|
|
if (!File.Exists(_zipPath)) throw new FileNotFoundException();
|
|
|
|
Shell32.Folder destinationFolder = GetShell32NameSpaceFolder(Application.StartupPath);
|
|
Shell32.Folder sourceFile = GetShell32NameSpaceFolder(_zipPath);
|
|
foreach (Shell32.FolderItem file in sourceFile.Items())
|
|
{
|
|
if (file.Name == "VW_BIN_Files")
|
|
{
|
|
destinationFolder.CopyHere(file, 4 | 16);
|
|
}
|
|
}
|
|
|
|
if (Directory.Exists(Application.StartupPath + @"\VW_BIN_Files"))
|
|
{
|
|
AllXDFFiles = Directory.GetFiles(Application.StartupPath + @"\VW_BIN_Files", "*.*", SearchOption.AllDirectories);
|
|
Directory.Delete(Application.StartupPath + @"\VW_BIN_Files", true);
|
|
}
|
|
}
|
|
catch (Exception mess)
|
|
{
|
|
MessageBox.Show("ERROR: Could not get BIN files list: " + Environment.NewLine + mess);
|
|
}
|
|
|
|
return AllXDFFiles;
|
|
}
|
|
}
|
|
|