//Кнопка - Спрятать. private void buttonProcessHide_Click(object sender, EventArgs e) { //Если пользователь указал все данные if (textBoxMainPath.TextLength > 0 && textBoxHideFiles.TextLength > 0) { outPath = Path.GetDirectoryName(textBoxMainPath.Text) + "\\" + Path.GetFileNameWithoutExtension(textBoxMainPath.Text) + " (hidder)" + Path.GetExtension(textBoxMainPath.Text); //MessageBox.Show(outPath); //то инициализируем упаковщик Hidder hidder = new Hidder(textBoxMainPath.Text, outPath, textBoxHideFiles.Text); if (checkBoxHideWithPassword.Checked) { hidder.setPassword(textBoxPasswordToHide.Text); } //и запускаем его hidder.hideFilesAtNewThread(radioButtonHideFolder.Checked); //так же запускаем новый (thread)поток, который будет информировать о процессе упаковки Thread thrdGetInfo = new Thread(() => threadGetInfoHide(hidder)); thrdGetInfo.IsBackground = true; thrdGetInfo.Start(); /*if (hidder.hideFiles(radioButtonHideFolder.Checked)) * { * MessageBox.Show("Успешно спрятано в новом файле "+outPath); * } else * { * MessageBox.Show("Не удалось спрятать!"); * }*/ } //MessageBox.Show(((char)65).ToString()); }
//Кнопка - распаковать private void buttonExtract_Click(object sender, EventArgs e) { //инициализируем распаковщик Hidder hidder = new Hidder(textBoxFile.Text); if (checkBoxExtractWithPassword.Checked) { hidder.setPassword(textBoxPasswordToExtract.Text); } //Включаем поток распаковки hidder.unhideFilesAtNewThread(textBoxPathExtract.Text); //Включаем поток вывода информации об распаковки пользователю Thread thrdGetInfo = new Thread(() => threadGetInfoExtract(hidder)); thrdGetInfo.IsBackground = true; thrdGetInfo.Start(); //tabControlMain.Enabled = false; }
//Поток распаковки private void threadGetInfoExtract(Hidder hidder) { extracting = true; long time = 0; panelExtract.BeginInvoke( ((Action)(() => panelExtract.Enabled = false))); panelStatusExtract.BeginInvoke( ((Action)(() => panelStatusExtract.Enabled = true))); labelStatus.BeginInvoke( ((Action)(() => labelStatus.Text = "поиск файлов"))); labelStatus.BeginInvoke( ((Action)(() => labelStatus.ForeColor = Color.Black))); progressBarExtract.BeginInvoke( ((Action)(() => progressBarExtract.Value = 0))); System.Threading.Thread.Sleep(1000); time++; //time++; while (hidder.ExtractingStatus()) { int hided = hidder.getCountHidedFiles(); int extracted = hidder.getExtractedFiles(); labelStatus.BeginInvoke( ((Action)(() => labelStatus.Text = "спрятано - " + hidder.getCountHidedFiles().ToString() + "; извлечено - " + hidder.getExtractedFiles().ToString()))); progressBarExtract.BeginInvoke( ((Action)(() => progressBarExtract.Value = hidder.getExtractingProgress()))); System.Threading.Thread.Sleep(1000); time++; } progressBarExtract.BeginInvoke( ((Action)(() => progressBarExtract.Value = hidder.getExtractingProgress()))); string statusMsg; Color msgColor = Color.Red; if (hidder.getCountHidedFiles() > 0 || hidder.getCountHidedFolders() > 0) { StringBuilder hh = new StringBuilder(((int)((time - (time % 3600)) / 3600)).ToString()); if (hh.Length == 1) { hh = new StringBuilder("0" + hh); } StringBuilder mm = new StringBuilder(((int)(((time % 3600)) / 60)).ToString()); if (mm.Length == 1) { mm = new StringBuilder("0" + mm); } StringBuilder ss = new StringBuilder(((int)(((time % 3600)) % 60)).ToString()); if (ss.Length == 1) { ss = new StringBuilder("0" + ss); } string sTime = hh.ToString() + ":" + mm.ToString() + ":" + ss.ToString(); statusMsg = "извлечено файлов - " + hidder.getExtractedFiles().ToString() + " за " + sTime; if (hidder.getExtractedFiles() == 0 && hidder.getExtractedFolders() > 0) { statusMsg = "извлечено папок - " + hidder.getExtractedFolders().ToString() + " за " + sTime; } msgColor = Color.DarkGreen; if (hidder.getCountHidedFiles() != hidder.getExtractedFiles()) { msgColor = Color.Red; } if (hidder.getExtractedFiles() == 0 && hidder.getExtractedFolders() == 0) { if (!hidder.CorrectPass()) { statusMsg = "неправильный пароль"; } else { statusMsg = "не получается распаковать"; } } } else { statusMsg = "ничего не найдено!"; msgColor = Color.DarkGreen; } labelStatus.BeginInvoke( ((Action)(() => labelStatus.Text = statusMsg))); labelStatus.BeginInvoke( ((Action)(() => labelStatus.ForeColor = msgColor))); /*panelStatusExtract.BeginInvoke( * ((Action)(() => panelStatusExtract.Enabled = false)));*/ panelExtract.BeginInvoke( ((Action)(() => panelExtract.Enabled = true))); extracting = false; if (hidder.getExtractedFiles() == 1) { MessageBox.Show("Файл извлечён в папку " + hidder.getOutDirectory()); } else if (hidder.getExtractedFiles() > 1) { MessageBox.Show("Файлы извлечены в папку " + hidder.getOutDirectory()); } }
//Поток информирования об упаковке private void threadGetInfoHide(Hidder hidder) { hiding = true; long time = 0; //Блокируем объекты panelHide.BeginInvoke( ((Action)(() => panelHide.Enabled = false))); panelStatusHide.BeginInvoke( ((Action)(() => panelStatusHide.Enabled = true))); /*labelStatusHide.BeginInvoke( * ((Action)(() => labelStatusHide.Text = "поиск файлов")));*/ //Делаем состояния объектов по умолчания labelStatusHide.BeginInvoke( ((Action)(() => labelStatusHide.ForeColor = Color.Black))); progressBarHide.BeginInvoke( ((Action)(() => progressBarHide.Value = 0))); System.Threading.Thread.Sleep(100); //Пока идёт упаковка while (hidder.HidingStatus()) { int toHide = hidder.getCountFilesToHide(); int hided = hidder.getHidedSuccess(); //Обновляем пользователю статус labelStatusHide.BeginInvoke( ((Action)(() => labelStatusHide.Text = "спрятано " + hided.ToString() + " из " + toHide.ToString()))); progressBarHide.BeginInvoke( ((Action)(() => progressBarHide.Value = hidder.getHidingProgress()))); //Делаем задержку 1 секунду System.Threading.Thread.Sleep(1000); time++; //Debug.WriteLine(extracted.ToString() + " " + hided.ToString()); //Debug.WriteLine(progress); } progressBarHide.BeginInvoke( ((Action)(() => progressBarHide.Value = hidder.getHidingProgress()))); string statusMsg; Color msgColor = Color.Red; //Инициализируем пользователю окончательное сообщение //if (hidder.getCountFilesToHide() > 0){ StringBuilder hh = new StringBuilder(((int)((time - (time % 3600)) / 3600)).ToString()); if (hh.Length == 1) { hh = new StringBuilder("0" + hh); } StringBuilder mm = new StringBuilder(((int)(((time % 3600)) / 60)).ToString()); if (mm.Length == 1) { mm = new StringBuilder("0" + mm); } StringBuilder ss = new StringBuilder(((int)(((time % 3600)) % 60)).ToString()); if (ss.Length == 1) { ss = new StringBuilder("0" + ss); } string sTime = hh.ToString() + ":" + mm.ToString() + ":" + ss.ToString(); statusMsg = "спрятано файлов - " + hidder.getHidedSuccess().ToString() + " за " + sTime; if (hidder.getHidedSuccess() == 0 && hidder.getHidedFoldersSuccess() > 0) { statusMsg = "спрятано папок - " + hidder.getHidedFoldersSuccess().ToString() + " за " + sTime; } msgColor = Color.DarkGreen; if (hidder.getCountFilesToHide() != hidder.getHidedSuccess()) { msgColor = Color.Red; } if (hidder.getHidedSuccess() == 0 && hidder.getHidedFoldersSuccess() == 0) { statusMsg = "неудалось спрятать!"; } //} else statusMsg = "папка не может быть пустой!"; //Выводим сообщение и разблокируем объекты labelStatusHide.BeginInvoke( ((Action)(() => labelStatusHide.Text = statusMsg))); labelStatusHide.BeginInvoke( ((Action)(() => labelStatusHide.ForeColor = msgColor))); /*panelStatusHide.BeginInvoke( * ((Action)(() => panelStatusHide.Enabled = false)));*/ panelHide.BeginInvoke( ((Action)(() => panelHide.Enabled = true))); hiding = false; if (hidder.getHidedSuccess() != 0) { MessageBox.Show("исходный файл - " + outPath); } }