886 lines
32 KiB
C#
886 lines
32 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Windows.Forms;
|
|
|
|
using SmartX;
|
|
using INT69DB_2A_ImageDll;
|
|
using INT69DB_2A.DialogForms;
|
|
using INT69DB_2A.Part11_Encryption;
|
|
|
|
namespace INT69DB_2A.Forms
|
|
{
|
|
public partial class FormDataBackup_Part11 : Form
|
|
{
|
|
#region Field
|
|
private FormMain m_ParentForm;
|
|
private SmartSplash Splash;
|
|
private string EncFileName;
|
|
private DataStore.E_DataType SelecteDataType;
|
|
|
|
private List<DataBackupYear> ListInspectionFile;
|
|
private List<DataBackupYear> ListHistoryFile;
|
|
|
|
private Queue<string> Q_FileList = new Queue<string>();
|
|
#endregion
|
|
|
|
#region Constructor
|
|
public FormDataBackup_Part11(FormMain parent)
|
|
{
|
|
InitializeComponent();
|
|
|
|
this.ParentForm = parent;
|
|
|
|
this.InitializeDesign();
|
|
this.DefaultSetting();
|
|
}
|
|
#endregion
|
|
|
|
#region Property
|
|
public FormMain ParentForm
|
|
{
|
|
get { return this.m_ParentForm; }
|
|
private set { this.m_ParentForm = value; }
|
|
}
|
|
#endregion
|
|
|
|
#region Method
|
|
private void InitializeDesign()
|
|
{
|
|
ImageDll images = new ImageDll();
|
|
|
|
if (this.ParentForm.SystemConfig.Language == DataStore.LanguageID.Korean)
|
|
{
|
|
|
|
}
|
|
else if (this.ParentForm.SystemConfig.Language == DataStore.LanguageID.English)
|
|
{
|
|
this.labelTitle.Text = "Data Backup";
|
|
}
|
|
else if (this.ParentForm.SystemConfig.Language == DataStore.LanguageID.Chinese)
|
|
{
|
|
this.labelTitle.Text = "数据备份";
|
|
}
|
|
else if (this.ParentForm.SystemConfig.Language == DataStore.LanguageID.Czech)
|
|
{
|
|
|
|
}
|
|
else if (this.ParentForm.SystemConfig.Language == DataStore.LanguageID.German)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
private void DefaultSetting()
|
|
{
|
|
this.EncFileName = "";
|
|
this.SelecteDataType = DataStore.E_DataType.None;
|
|
|
|
this.ListInspectionFile = new List<DataBackupYear>();
|
|
this.ListHistoryFile = new List<DataBackupYear>();
|
|
}
|
|
|
|
// Backup
|
|
private void Backup(DataStore.E_DataType type, TreeView view)
|
|
{
|
|
string targetPath = "", sourceFilePath = "", destFilePath = "", dataFolderPath = "";
|
|
string[] result;
|
|
DirectoryInfo dir;
|
|
FileInfo[] files;
|
|
List<string> listSelectedFile = new List<string>(); // 백업할 파일 리스트 (yyyy/MM/filename.csv)
|
|
this.Q_FileList = new Queue<string>();
|
|
|
|
switch (type)
|
|
{
|
|
case DataStore.E_DataType.None:
|
|
break;
|
|
case DataStore.E_DataType.History:
|
|
dataFolderPath = this.ParentForm.PathDataHistoryFolder;
|
|
break;
|
|
case DataStore.E_DataType.Inspection:
|
|
dataFolderPath = this.ParentForm.PathDataInspectionFolder;
|
|
//if (this.ParentForm.SystemConfig.EquipmentMode == 2)
|
|
// dataFolderPath = this.ParentForm.PathDataInspectionStick2Folder;
|
|
//else
|
|
// dataFolderPath = this.ParentForm.PathDataInspectionStick1Folder;
|
|
break;
|
|
case DataStore.E_DataType.Others:
|
|
dataFolderPath = this.ParentForm.PathDataOthersFolder;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (dataFolderPath == "")
|
|
return;
|
|
|
|
targetPath = "하드 디스크\\";
|
|
listSelectedFile = this.GetSeletedNodeList(view);
|
|
|
|
#region USB 장착 유무 체크
|
|
dir = new DirectoryInfo(targetPath);
|
|
if (dir.Exists == false)
|
|
{
|
|
// USB메모리가 장착되지 않았습니다
|
|
DialogFormMessage msg = new DialogFormMessage(5, this.ParentForm.SystemConfig.Language);
|
|
msg.ShowDialog();
|
|
return;
|
|
}
|
|
#endregion
|
|
#region 백업할 파일 유무 체크
|
|
if (listSelectedFile.Count == 0)
|
|
{
|
|
DialogFormMessage msg = new DialogFormMessage(4, this.ParentForm.SystemConfig.Language);
|
|
msg.ShowDialog();
|
|
return;
|
|
}
|
|
#endregion
|
|
|
|
// Splash Start
|
|
this.SplashStart();
|
|
|
|
#region Header && Encryption 폴더에 파일 삭제
|
|
// Header && Encryption 폴더에 파일 삭제
|
|
this.DirectoryFileDelete(this.ParentForm.PathEncryptionFolder);
|
|
this.DirectoryFileDelete(this.ParentForm.PathHeaderFolder);
|
|
#endregion
|
|
|
|
try
|
|
{
|
|
#region Header 파일 생성
|
|
// Header 파일 생성
|
|
FileHeaderItem header = new FileHeaderItem();
|
|
header.TimeStamp = DateTime.Now;
|
|
header.LoginId = this.ParentForm.SystemConfig.CurrentUser.ID;
|
|
header.SerialNumber = this.ParentForm.SystemConfig.SerialNumber;
|
|
header.EquipmentColumns = this.ParentForm.SystemConfig.EquipmentColumns;
|
|
header.EquipmentType = 103;
|
|
|
|
for (int i = 0; i < listSelectedFile.Count; i++)
|
|
this.CreateHeaderFile(this.ParentForm.PathHeaderFolder, listSelectedFile[i], header);
|
|
#endregion
|
|
|
|
#region 파일 암호화
|
|
// 데이터 파일
|
|
for (int i = 0; i < listSelectedFile.Count; i++)
|
|
this.Q_FileList.Enqueue(string.Format("{0}{1}", dataFolderPath, listSelectedFile[i]));
|
|
// 헤더 파일
|
|
dir = new DirectoryInfo(this.ParentForm.PathHeaderFolder);
|
|
files = dir.GetFiles();
|
|
foreach (FileInfo file in files)
|
|
{
|
|
result = file.FullName.Split('\\');
|
|
sourceFilePath = file.FullName;
|
|
destFilePath = string.Format("{0}{1}", this.ParentForm.PathEncryptionFolder, result[result.Length - 1]);
|
|
|
|
this.Q_FileList.Enqueue(file.FullName);
|
|
}
|
|
|
|
this.EncryptionFile(this.Q_FileList.Dequeue());
|
|
#endregion
|
|
}
|
|
catch
|
|
{
|
|
// 제조사에 문의하세요
|
|
DialogFormMessage msg = new DialogFormMessage(6, this.ParentForm.SystemConfig.Language);
|
|
this.SplashFinish();
|
|
msg.ShowDialog();
|
|
return;
|
|
}
|
|
}
|
|
// FileCopy
|
|
private void FileCopy(DataStore.E_DataType type)
|
|
{
|
|
int count = 0;
|
|
string targetPath = "", destTargetPath = "", sourceFilePath = "", destFilePath = "";
|
|
string[] result;
|
|
DirectoryInfo dir;
|
|
FileInfo[] files;
|
|
|
|
try
|
|
{
|
|
#region USB 복사
|
|
targetPath = "하드 디스크\\";
|
|
|
|
// USB\SerialNumber\ 루트
|
|
destTargetPath = string.Format("{0}{1}\\Data\\{2}\\{3}\\", targetPath, this.ParentForm.SystemConfig.SerialNumber, type, DateTime.Now.ToString("yyyyMMdd_HHmmss"));
|
|
|
|
// USB 폴더 체크 및 생성
|
|
dir = new DirectoryInfo(destTargetPath);
|
|
if (dir.Exists == false)
|
|
dir.Create();
|
|
|
|
// 파일 복사
|
|
dir = new DirectoryInfo(this.ParentForm.PathEncryptionFolder);
|
|
if (dir.Exists == false)
|
|
dir.Create();
|
|
|
|
files = dir.GetFiles();
|
|
count = files.Length;
|
|
foreach (FileInfo file in files)
|
|
{
|
|
result = file.FullName.Split('\\');
|
|
sourceFilePath = file.FullName;
|
|
destFilePath = string.Format("{0}{1}", destTargetPath, result[result.Length - 1]);
|
|
|
|
// 파일 중복 검사
|
|
if (File.Exists(destFilePath) == true)
|
|
{
|
|
DialogFormYesNo df = new DialogFormYesNo(this.ParentForm.SystemConfig.Language, 31, Path.GetFileName(result[result.Length - 1]));
|
|
df.BringToFront();
|
|
if (df.ShowDialog() == DialogResult.Yes)
|
|
{
|
|
this.Refresh();
|
|
File.Delete(destFilePath); // 존재하는 파일 삭제
|
|
File.Copy(sourceFilePath, destFilePath);
|
|
}
|
|
else
|
|
{
|
|
count--;
|
|
this.Refresh();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
File.Copy(sourceFilePath, destFilePath);
|
|
}
|
|
}
|
|
|
|
if (type == DataStore.E_DataType.Others)
|
|
{
|
|
dir = new DirectoryInfo(this.ParentForm.PathDataBackupFolder);
|
|
files = dir.GetFiles();
|
|
foreach (FileInfo file in files)
|
|
file.Delete();
|
|
|
|
this.UpdateDisplayOtherFile();
|
|
}
|
|
|
|
// 복사 완료 메시지
|
|
DialogFormMessage msg = new DialogFormMessage((count / 2).ToString(), this.ParentForm.SystemConfig.Language);
|
|
this.ParentForm.SetTrackingHistoryData(DataStore.TrackingOperation.DataBackup, type.ToString());
|
|
this.SplashFinish();
|
|
msg.ShowDialog();
|
|
#endregion
|
|
}
|
|
catch
|
|
{
|
|
// 제조사에 문의하세요
|
|
DialogFormMessage msg = new DialogFormMessage(6, this.ParentForm.SystemConfig.Language);
|
|
this.SplashFinish();
|
|
msg.ShowDialog();
|
|
return;
|
|
}
|
|
}
|
|
// OtherBackup
|
|
private void OtherBackup()
|
|
{
|
|
string targetPath = "", sourceFilePath = "", destFilePath = "", dataFolderPath = "";
|
|
string[] result;
|
|
DirectoryInfo dir;
|
|
FileInfo[] files;
|
|
this.Q_FileList = new Queue<string>();
|
|
|
|
dataFolderPath = this.ParentForm.PathDataBackupFolder;
|
|
|
|
if (dataFolderPath == "")
|
|
return;
|
|
|
|
targetPath = "하드 디스크\\";
|
|
if (this.listBoxOther.Items.Count == 0)
|
|
{
|
|
DialogFormMessage msg = new DialogFormMessage(4, this.ParentForm.SystemConfig.Language);
|
|
msg.ShowDialog();
|
|
return;
|
|
}
|
|
|
|
this.SplashStart();
|
|
|
|
#region Header && Encryption 폴더에 파일 삭제
|
|
// Header && Encryption 폴더에 파일 삭제
|
|
this.DirectoryFileDelete(this.ParentForm.PathEncryptionFolder);
|
|
this.DirectoryFileDelete(this.ParentForm.PathHeaderFolder);
|
|
#endregion
|
|
|
|
#region USB 장착 유무 체크
|
|
// USB 장착 유무 체크
|
|
dir = new DirectoryInfo(targetPath);
|
|
if (dir.Exists == false)
|
|
{
|
|
// USB메모리가 장착되지 않았습니다
|
|
DialogFormMessage msg = new DialogFormMessage(5, this.ParentForm.SystemConfig.Language);
|
|
this.SplashFinish();
|
|
msg.ShowDialog();
|
|
return;
|
|
}
|
|
#endregion
|
|
|
|
try
|
|
{
|
|
dir = new DirectoryInfo(this.ParentForm.PathDataBackupFolder);
|
|
files = dir.GetFiles();
|
|
List<string> listSelectedFile = new List<string>();
|
|
|
|
// jpg 파일 -> EncryptionFolder로 복사
|
|
foreach (FileInfo file in files)
|
|
{
|
|
if (file.Name.Substring(file.Name.Length - 3, 3) == "jpg")
|
|
{
|
|
file.CopyTo(string.Format("{0}{1}", this.ParentForm.PathEncryptionFolder, file.Name));
|
|
file.Delete();
|
|
}
|
|
else
|
|
listSelectedFile.Add(file.FullName);
|
|
}
|
|
|
|
#region Header 파일 생성
|
|
// Header 파일 생성
|
|
FileHeaderItem header = new FileHeaderItem();
|
|
header.TimeStamp = DateTime.Now;
|
|
header.LoginId = this.ParentForm.SystemConfig.CurrentUser.ID;
|
|
header.SerialNumber = this.ParentForm.SystemConfig.SerialNumber;
|
|
header.EquipmentColumns = this.ParentForm.SystemConfig.EquipmentColumns;
|
|
|
|
for (int i = 0; i < listSelectedFile.Count; i++)
|
|
this.CreateHeaderFile(this.ParentForm.PathHeaderFolder, listSelectedFile[i], header);
|
|
#endregion
|
|
|
|
#region 파일 암호화
|
|
// 데이터 파일
|
|
for (int i = 0; i < listSelectedFile.Count; i++)
|
|
this.Q_FileList.Enqueue(listSelectedFile[i]);
|
|
// 헤더 파일
|
|
dir = new DirectoryInfo(this.ParentForm.PathHeaderFolder);
|
|
files = dir.GetFiles();
|
|
foreach (FileInfo file in files)
|
|
{
|
|
result = file.FullName.Split('\\');
|
|
sourceFilePath = file.FullName;
|
|
destFilePath = string.Format("{0}{1}", this.ParentForm.PathEncryptionFolder, result[result.Length - 1]);
|
|
|
|
this.Q_FileList.Enqueue(file.FullName);
|
|
}
|
|
|
|
this.EncryptionFile(this.Q_FileList.Dequeue());
|
|
#endregion
|
|
}
|
|
catch
|
|
{
|
|
// 제조사에 문의하세요
|
|
DialogFormMessage msg = new DialogFormMessage(6, this.ParentForm.SystemConfig.Language);
|
|
this.SplashFinish();
|
|
msg.ShowDialog();
|
|
return;
|
|
}
|
|
}
|
|
|
|
private void SplashStart()
|
|
{
|
|
this.Splash = new SmartX.SmartSplash();
|
|
this.Splash.CenterPosition = false;
|
|
this.Splash.Left = 380;
|
|
this.Splash.Top = 280;
|
|
this.Splash.AnimationInterval = 200;
|
|
this.Splash.LoadingImagePathname = "SmartLoading4";
|
|
this.Splash.Start();
|
|
this.Enabled = false;
|
|
}
|
|
private void SplashFinish()
|
|
{
|
|
this.Splash.Finish();
|
|
this.Enabled = true;
|
|
|
|
this.EncFileName = "";
|
|
this.labelFileName.Text = "-";
|
|
this.labelPercentage.Text = "0%";
|
|
this.SelecteDataType = DataStore.E_DataType.None;
|
|
}
|
|
|
|
private List<string> DirectorySort(DirectoryInfo[] directorys)
|
|
{
|
|
List<string> listDirectory = new List<string>();
|
|
Dictionary<string, int> dirNames = new Dictionary<string, int>();
|
|
|
|
foreach (DirectoryInfo dir in directorys)
|
|
dirNames.Add(dir.Name, int.Parse(dir.Name));
|
|
|
|
// 순서데로 오름차순 정렬
|
|
var vrList = dirNames.OrderBy(x => x.Value);
|
|
foreach (var v in vrList)
|
|
listDirectory.Add(v.Key);
|
|
|
|
return listDirectory;
|
|
}
|
|
private List<string> DayInspectionDirectorySort(FileInfo[] files)
|
|
{
|
|
List<string> listFile = new List<string>();
|
|
Dictionary<string, int> dirNames = new Dictionary<string, int>();
|
|
|
|
#region File List 품번 순서데로 정렬
|
|
foreach (FileInfo file in files)
|
|
dirNames.Add(file.Name, int.Parse(file.Name.Substring(10, 1)));
|
|
|
|
var vrList = dirNames.OrderBy(x => x.Value);
|
|
foreach (var v in vrList)
|
|
listFile.Add(v.Key);
|
|
#endregion
|
|
|
|
#region File List 날짜 순서데로 정렬
|
|
dirNames = new Dictionary<string, int>();
|
|
foreach (string f in listFile)
|
|
dirNames.Add(f, int.Parse(f.Substring(1, 8)));
|
|
|
|
listFile.Clear();
|
|
vrList = dirNames.OrderBy(x => x.Value);
|
|
foreach (var v in vrList)
|
|
listFile.Add(v.Key);
|
|
#endregion
|
|
|
|
return listFile;
|
|
}
|
|
private List<string> DayHistoryDirectorySort(FileInfo[] files)
|
|
{
|
|
List<string> listFile = new List<string>();
|
|
Dictionary<string, int> dirNames = new Dictionary<string, int>();
|
|
Dictionary<string, int> dirNamesSort = new Dictionary<string, int>();
|
|
|
|
foreach (FileInfo file in files)
|
|
{
|
|
if (file.Name.StartsWith("H") == true)
|
|
dirNames.Add(file.Name, int.Parse(file.Name.Substring(1, 8)));
|
|
}
|
|
|
|
var vrList = dirNames.Keys.ToList();
|
|
vrList.Sort();
|
|
|
|
foreach (var v in vrList)
|
|
dirNamesSort.Add(v, dirNames[v]);
|
|
|
|
foreach (var v in dirNamesSort)
|
|
listFile.Add(v.Key);
|
|
|
|
return listFile;
|
|
}
|
|
private List<string> GetSeletedNodeList(TreeView tree)
|
|
{
|
|
int yearCNT, monthCNT, dayCNT;
|
|
List<string> listSelectedFile = new List<string>();
|
|
|
|
yearCNT = tree.Nodes.Count;
|
|
if (yearCNT != 0)
|
|
{
|
|
for (int i = 0; i < yearCNT; i++)
|
|
{
|
|
monthCNT = tree.Nodes[i].Nodes.Count;
|
|
if (monthCNT != 0)
|
|
{
|
|
for (int j = 0; j < monthCNT; j++)
|
|
{
|
|
dayCNT = tree.Nodes[i].Nodes[j].Nodes.Count;
|
|
if (dayCNT != 0)
|
|
{
|
|
for (int k = 0; k < dayCNT; k++)
|
|
{
|
|
if (tree.Nodes[i].Nodes[j].Nodes[k].Checked == true)
|
|
{
|
|
//listSelectedFile.Add(tree.Nodes[i].Nodes[j].Nodes[k].Text);
|
|
listSelectedFile.Add(string.Format("{0}\\{1}\\{2}", tree.Nodes[i].Text, tree.Nodes[i].Nodes[j].Text, tree.Nodes[i].Nodes[j].Nodes[k].Text));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return listSelectedFile;
|
|
}
|
|
|
|
private void UpdateDisplayInspectionFile()
|
|
{
|
|
int fileCount = 0;
|
|
//TreeNode node;
|
|
List<string> years = new List<string>();
|
|
List<string> months = new List<string>();
|
|
List<string> days = new List<string>();
|
|
|
|
this.treeViewInspection.Nodes.Clear();
|
|
this.ListInspectionFile.Clear();
|
|
|
|
DirectoryInfo dir = new DirectoryInfo(this.ParentForm.PathDataInspectionFolder);
|
|
List<string> fileNames = new List<string>();
|
|
|
|
// 폴더 체크
|
|
if (dir.Exists == false)
|
|
dir.Create();
|
|
|
|
// year 폴더 가져오기
|
|
DirectoryInfo[] yearDirectorys = dir.GetDirectories();
|
|
// year 폴더 정렬
|
|
years = this.DirectorySort(yearDirectorys);
|
|
|
|
// Inspection File 리스트 생성
|
|
if (years.Count != 0)
|
|
{
|
|
// Year
|
|
foreach (string year in years)
|
|
{
|
|
DataBackupYear y = new DataBackupYear(year);
|
|
DirectoryInfo monthDir = new DirectoryInfo(string.Format("{0}{1}", this.ParentForm.PathDataInspectionFolder, year));
|
|
DirectoryInfo[] monthDirectorys = monthDir.GetDirectories();
|
|
|
|
months = this.DirectorySort(monthDirectorys);
|
|
|
|
if (months.Count != 0)
|
|
{
|
|
// Month
|
|
foreach (string month in months)
|
|
{
|
|
DirectoryInfo dayDir = new DirectoryInfo(string.Format("{0}{1}\\{2}", this.ParentForm.PathDataInspectionFolder, year, month));
|
|
FileInfo[] dayFiles = dayDir.GetFiles();
|
|
|
|
days = this.DayInspectionDirectorySort(dayFiles);
|
|
|
|
DataBackupMonth m = new DataBackupMonth(month);
|
|
m.Days = days;
|
|
|
|
y.Months.Add(m);
|
|
}
|
|
|
|
this.ListInspectionFile.Add(y);
|
|
}
|
|
else
|
|
{
|
|
this.ListInspectionFile.Add(y);
|
|
}
|
|
}
|
|
|
|
// node 생성
|
|
for (int i = 0; i < this.ListInspectionFile.Count; i++)
|
|
{
|
|
TreeNode node = new TreeNode(this.ListInspectionFile[i].Year);
|
|
for (int j = 0; j < this.ListInspectionFile[i].Months.Count; j++)
|
|
{
|
|
TreeNode nodeMonth = new TreeNode(this.ListInspectionFile[i].Months[j].Month);
|
|
|
|
for (int k = 0; k < this.ListInspectionFile[i].Months[j].Days.Count; k++)
|
|
{
|
|
nodeMonth.Nodes.Add(this.ListInspectionFile[i].Months[j].Days[k]);
|
|
fileCount++;
|
|
}
|
|
node.Nodes.Add(nodeMonth);
|
|
}
|
|
this.treeViewInspection.Nodes.Add(node);
|
|
}
|
|
}
|
|
|
|
this.labelInspectionFileCount.Text = fileCount.ToString();
|
|
}
|
|
private void UpdateDisplayHistoryFile()
|
|
{
|
|
int fileCount = 0;
|
|
//TreeNode node;
|
|
List<string> years = new List<string>();
|
|
List<string> months = new List<string>();
|
|
List<string> days = new List<string>();
|
|
|
|
this.treeViewHistory.Nodes.Clear();
|
|
this.ListHistoryFile.Clear();
|
|
|
|
DirectoryInfo dir = new DirectoryInfo(this.ParentForm.PathDataHistoryFolder);
|
|
List<string> fileNames = new List<string>();
|
|
|
|
// 폴더 체크
|
|
if (dir.Exists == false)
|
|
dir.Create();
|
|
|
|
// year 폴더 가져오기
|
|
DirectoryInfo[] yearDirectorys = dir.GetDirectories();
|
|
// year 폴더 정렬
|
|
years = this.DirectorySort(yearDirectorys);
|
|
|
|
// Inspection File 리스트 생성
|
|
if (years.Count != 0)
|
|
{
|
|
// Year
|
|
foreach (string year in years)
|
|
{
|
|
DataBackupYear y = new DataBackupYear(year);
|
|
DirectoryInfo monthDir = new DirectoryInfo(string.Format("{0}{1}", this.ParentForm.PathDataHistoryFolder, year));
|
|
DirectoryInfo[] monthDirectorys = monthDir.GetDirectories();
|
|
|
|
months = this.DirectorySort(monthDirectorys);
|
|
|
|
if (months.Count != 0)
|
|
{
|
|
// Month
|
|
foreach (string month in months)
|
|
{
|
|
DirectoryInfo dayDir = new DirectoryInfo(string.Format("{0}{1}\\{2}", this.ParentForm.PathDataHistoryFolder, year, month));
|
|
FileInfo[] dayFiles = dayDir.GetFiles();
|
|
|
|
days = this.DayHistoryDirectorySort(dayFiles);
|
|
|
|
DataBackupMonth m = new DataBackupMonth(month);
|
|
m.Days = days;
|
|
|
|
y.Months.Add(m);
|
|
}
|
|
|
|
this.ListHistoryFile.Add(y);
|
|
}
|
|
else
|
|
{
|
|
this.ListHistoryFile.Add(y);
|
|
}
|
|
}
|
|
|
|
// node 생성
|
|
for (int i = 0; i < this.ListHistoryFile.Count; i++)
|
|
{
|
|
TreeNode node = new TreeNode(this.ListHistoryFile[i].Year);
|
|
for (int j = 0; j < this.ListHistoryFile[i].Months.Count; j++)
|
|
{
|
|
TreeNode nodeMonth = new TreeNode(this.ListHistoryFile[i].Months[j].Month);
|
|
|
|
for (int k = 0; k < this.ListHistoryFile[i].Months[j].Days.Count; k++)
|
|
{
|
|
nodeMonth.Nodes.Add(this.ListHistoryFile[i].Months[j].Days[k]);
|
|
fileCount++;
|
|
}
|
|
node.Nodes.Add(nodeMonth);
|
|
}
|
|
this.treeViewHistory.Nodes.Add(node);
|
|
}
|
|
}
|
|
this.labelHistoryFileCount.Text = fileCount.ToString();
|
|
}
|
|
private void UpdateDisplayOtherFile()
|
|
{
|
|
bool directoryCheck = false;
|
|
|
|
this.ParentForm.SystemConfig.CurrentForm = DataStore.FormStore.FormDataBackup;
|
|
|
|
DirectoryInfo dir = new DirectoryInfo(this.ParentForm.PathDataBackupFolder);
|
|
|
|
directoryCheck = dir.Exists;
|
|
// 폴더 체크
|
|
if (directoryCheck == false)
|
|
dir.Create();
|
|
|
|
FileInfo[] files = dir.GetFiles();
|
|
|
|
this.listBoxOther.Items.Clear();
|
|
|
|
foreach (FileInfo file in files)
|
|
this.listBoxOther.Items.Add(file.Name);
|
|
|
|
this.labelOtherFileCount.Text = this.listBoxOther.Items.Count.ToString();
|
|
}
|
|
|
|
private void EncryptionFile(string sourceFilePath)
|
|
{
|
|
string[] data = sourceFilePath.Split('\\');
|
|
string destinationFilePath = string.Format("{0}{1}", this.ParentForm.PathEncryptionFolder, data[data.Length - 1]);
|
|
|
|
this.UI_Invoke(delegate
|
|
{
|
|
this.labelFileName.Text = data[data.Length - 1];
|
|
this.EncFileName = sourceFilePath;
|
|
});
|
|
|
|
Encryption.AesEncryption(sourceFilePath, destinationFilePath, true, true);
|
|
}
|
|
|
|
private void CreateHeaderFile(string headerFilePath, string sourceFilePath, FileHeaderItem header)
|
|
{
|
|
string[] result, fileName;
|
|
string filePath, section, key, value;
|
|
|
|
result = sourceFilePath.Split('\\');
|
|
fileName = result[result.Length - 1].Split('.');
|
|
filePath = string.Format("{0}{1}_h.ini", headerFilePath, fileName[0]);
|
|
section = header.GetType().Name;
|
|
|
|
// LoginID
|
|
key = DataStore.E_FileHeaderItem.LoginId.ToString();
|
|
value = header.LoginId;
|
|
IniFile.WriteString(filePath, section, key, value);
|
|
Thread.Sleep(5);
|
|
|
|
// SerialNumber
|
|
key = DataStore.E_FileHeaderItem.SerialNumber.ToString();
|
|
value = header.SerialNumber;
|
|
IniFile.WriteString(filePath, section, key, value);
|
|
Thread.Sleep(5);
|
|
|
|
// EquipmentColumns
|
|
key = DataStore.E_FileHeaderItem.EquipmentColumns.ToString();
|
|
value = header.EquipmentColumns.ToString();
|
|
IniFile.WriteString(filePath, section, key, value);
|
|
Thread.Sleep(5);
|
|
|
|
// TimeStamp
|
|
key = DataStore.E_FileHeaderItem.TimeStamp.ToString();
|
|
value = header.TimeStamp.ToString("MM/dd/yyyy HH:mm:ss");
|
|
IniFile.WriteString(filePath, section, key, value);
|
|
Thread.Sleep(5);
|
|
|
|
// EquipmentType
|
|
key = DataStore.E_FileHeaderItem.EquipmentType.ToString();
|
|
value = header.EquipmentType.ToString();
|
|
IniFile.WriteString(filePath, section, key, value);
|
|
Thread.Sleep(5);
|
|
}
|
|
private void DirectoryFileDelete(string dirPath)
|
|
{
|
|
DirectoryInfo dir = new DirectoryInfo(dirPath);
|
|
FileInfo[] files = dir.GetFiles();
|
|
|
|
foreach (FileInfo file in files)
|
|
{
|
|
file.Delete();
|
|
}
|
|
}
|
|
private bool UI_Invoke(ThreadStart invoker)
|
|
{
|
|
try
|
|
{
|
|
if (this.InvokeRequired)
|
|
{
|
|
if (this.IsDisposed)
|
|
return true;
|
|
|
|
this.Invoke(invoker);
|
|
}
|
|
else
|
|
{
|
|
invoker();
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
public void CallBackEncryptionEvent(Encryption.auth_encryption_status_t sender)
|
|
{
|
|
if (sender.inFileName == this.EncFileName)
|
|
{
|
|
this.UI_Invoke(delegate
|
|
{
|
|
this.labelPercentage.Text = string.Format("{0} %", sender.percentage);
|
|
});
|
|
|
|
if (sender.percentage == 100)
|
|
{
|
|
if (sender.status == 0)
|
|
{
|
|
if (this.Q_FileList.Count != 0)
|
|
{
|
|
this.UI_Invoke(delegate
|
|
{
|
|
this.timerEncryption.Enabled = true;
|
|
});
|
|
|
|
}
|
|
else
|
|
{
|
|
this.UI_Invoke(delegate
|
|
{
|
|
this.timerFileCopy.Enabled = true;
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void DisplayRefresh()
|
|
{
|
|
this.ParentForm.SystemConfig.CurrentForm = DataStore.FormStore.FormDataBackup;
|
|
|
|
this.EncFileName = "";
|
|
this.labelFileName.Text = "-";
|
|
this.labelPercentage.Text = "0%";
|
|
this.SelecteDataType = DataStore.E_DataType.None;
|
|
|
|
this.UpdateDisplayInspectionFile();
|
|
this.UpdateDisplayHistoryFile();
|
|
this.UpdateDisplayOtherFile();
|
|
|
|
//this.treeViewInspection.ExpandAll();
|
|
//this.treeViewHistory.ExpandAll();
|
|
}
|
|
#endregion
|
|
|
|
#region Event Handler
|
|
private void buttonBack_Click(object sender, EventArgs e)
|
|
{
|
|
((FormMain)(Owner)).smartForm.Show(2);
|
|
}
|
|
|
|
private void treeViewInspection_AfterSelect(object sender, TreeViewEventArgs e)
|
|
{
|
|
if (e.Node.Text.Substring(0, 1) == "I")
|
|
{
|
|
if (e.Node.Checked == true)
|
|
e.Node.Checked = false;
|
|
else
|
|
e.Node.Checked = true;
|
|
}
|
|
}
|
|
private void treeViewHistory_AfterSelect(object sender, TreeViewEventArgs e)
|
|
{
|
|
if (e.Node.Text.Substring(0, 1) == "H")
|
|
{
|
|
if (e.Node.Checked == true)
|
|
e.Node.Checked = false;
|
|
else
|
|
e.Node.Checked = true;
|
|
}
|
|
}
|
|
|
|
private void buttonInspectionBackupEncryption_Click(object sender, EventArgs e)
|
|
{
|
|
this.SelecteDataType = DataStore.E_DataType.Inspection;
|
|
this.Backup(this.SelecteDataType, this.treeViewInspection);
|
|
}
|
|
private void buttonHistoryBackupEncryption_Click(object sender, EventArgs e)
|
|
{
|
|
this.SelecteDataType = DataStore.E_DataType.History;
|
|
this.Backup(this.SelecteDataType, this.treeViewHistory);
|
|
}
|
|
private void buttonOtherBackup_Click(object sender, EventArgs e)
|
|
{
|
|
this.SelecteDataType = DataStore.E_DataType.Others;
|
|
this.OtherBackup();
|
|
}
|
|
|
|
private void timerEncryption_Tick(object sender, EventArgs e)
|
|
{
|
|
this.timerEncryption.Enabled = false;
|
|
this.EncryptionFile(this.Q_FileList.Dequeue());
|
|
}
|
|
private void timerFileCopy_Tick(object sender, EventArgs e)
|
|
{
|
|
this.timerFileCopy.Enabled = false;
|
|
this.FileCopy(this.SelecteDataType);
|
|
}
|
|
#endregion
|
|
}
|
|
} |