private void DoBackup(BackgroundWorker bgWorker, DoWorkEventArgs e) { BackupDataArgs backupData = e.Argument as BackupDataArgs; int currentProgress = 0; bgWorker.ReportProgress(currentProgress); //zip progressvalue is calculated different from copy progressvalue int progressValue = (backupData.FileSettings[(int)FSettings.ZipFile]) ? 40 / (backupData.BackupFiles.Count) : 80 / (backupData.BackupFiles.Count * backupData.BackupLocations.Count); //add this number every time a file is copied, not that accurate but w/e //shows that everything works and is ready to copy currentProgress = 20; #region copy files //if the files are being copied into a subfolder or the given folder if (backupData.FileSettings[(int)FSettings.SubFolder] || backupData.FileSettings[(int)FSettings.GivenDirectory]) { foreach (string f in backupData.BackupFiles) //copy each file to every backup location, f=file, l=location { foreach (string l in backupData.BackupLocations) { try { if (backupData.FileSettings[(int)FSettings.GivenDirectory]) //copy files in given directory { File.Copy(f, Path.Combine(l, Path.GetFileName(f)), backupData.FileSettings[(int)FSettings.Override]); } else if (backupData.FileSettings[(int)FSettings.SubFolder]) { if (backupData.FileSettings[(int)FSettings.AddDateToFileName]) //create subfolder and add date to foldername { File.Copy(f, Path.Combine(l, backupData.FileName + "_" + backupData.DTNow.Day + "-" + backupData.DTNow.Month + "-" + backupData.DTNow.Year, Path.GetFileName(f)), backupData.FileSettings[(int)FSettings.Override]); } else //just create a subfolder { File.Copy(f, Path.Combine(l, backupData.FileName, Path.GetFileName(f)), backupData.FileSettings[(int)FSettings.Override]); } } currentProgress = (currentProgress + progressValue < 100) ? currentProgress + progressValue : 100; //100 is maximum, if it would go above just set it 100 bgWorker.ReportProgress(currentProgress); } catch (Exception ex) { Console.WriteLine(ex); e.Cancel = true; return; } } } } #endregion #region files in zip else //make a zip file { if (!Directory.Exists(backupData.FileName)) //create temporary folder to make zip { Directory.CreateDirectory(backupData.FileName); } foreach (string f in backupData.BackupFiles) { File.Copy(f, Path.Combine(backupData.FileName, Path.GetFileName(f)), true); currentProgress = (currentProgress + progressValue < 60) ? currentProgress + progressValue : 60; //60 is maximum for this operation, if it goes above just set it to 60 bgWorker.ReportProgress(currentProgress); } //adjust progressvalue to locations, 35% progress for locations progressValue = 35 / backupData.BackupLocations.Count; foreach (string l in backupData.BackupLocations) //copy zip to every location { if (backupData.FileSettings[(int)FSettings.Override]) //if overriding is true, delete old identical zip files { try { if (File.Exists(Path.Combine(l, backupData.FileName + "_" + backupData.DTNow.Day + "-" + backupData.DTNow.Month + "-" + backupData.DTNow.Year + ".zip"))) { File.Delete(Path.Combine(l, backupData.FileName + "_" + backupData.DTNow.Day + "-" + backupData.DTNow.Month + "-" + backupData.DTNow.Year + ".zip")); } if (File.Exists(Path.Combine(l, backupData.FileName + ".zip"))) { File.Delete(Path.Combine(l, backupData.FileName + ".zip")); } } catch (Exception ex) { Console.WriteLine(ex); e.Cancel = true; return; } } try { if (checkBoxDate.Checked) { ZipFile.CreateFromDirectory(backupData.FileName, Path.Combine(l, backupData.FileName + "_" + backupData.DTNow.Day + "-" + backupData.DTNow.Month + "-" + backupData.DTNow.Year + ".zip")); } else { ZipFile.CreateFromDirectory(backupData.FileName, Path.Combine(l, backupData.FileName + ".zip")); } } catch (Exception ex) { Console.WriteLine(ex); e.Cancel = true; return; } currentProgress = (currentProgress + progressValue < 95) ? currentProgress + progressValue : 95; //95 is maximum for this operation bgWorker.ReportProgress(currentProgress); } bgWorker.ReportProgress(95); Directory.Delete(backupData.FileName, true); } #endregion }
private void buttonOK_Click(object sender, EventArgs e) { DateTime dt = DateTime.Now; //for adding date to file names List <string> backupLocations = new List <string>(); List <string> backupFiles = new List <string>(); //taking values from checkboxes and radiobuttons bool[] fileSettings = new bool[] { checkBoxOverride.Checked, radioButtonNormal.Checked, radioButtonFolder.Checked, radioButtonZIP.Checked, checkBoxDate.Checked }; string fname = textBoxName.Text; if (comboBoxFilestobackup.Items.Count == 0) //if no files to backup are given { displayText("No file selected!", 1500, "red"); return; } if (comboBoxBackupLocations.Items.Count == 0) //if no backup locations are given { displayText("No backup path set!", 1500, "red"); return; } //fill the lists with the items in the comboboxes foreach (string s in comboBoxBackupLocations.Items) { backupLocations.Add(s); } foreach (string s in comboBoxFilestobackup.Items) { backupFiles.Add(s); } #region check if files, directories exist //check if directories still exist foreach (string s in backupLocations) { if (!Directory.Exists(s)) { displayText("'" + s + "' is not a valid location!", 1500, "red"); return; } } //check if files still exist foreach (string s in backupFiles) { if (!File.Exists(s)) { displayText("'" + s + "' does not exist! Did you delete or move the file?", 1500, "red"); return; } } //check if the folder/zip is named if ((fileSettings[(int)FSettings.SubFolder] || fileSettings[(int)FSettings.ZipFile]) && (textBoxName.Text.Equals("Name Folder/.zip") || (textBoxName.Text.Trim().Equals("")))) { displayText("Please enter a name for your Folder/.zip!", 1500, "red"); return; } #endregion #region prepare and create folders if (fileSettings[(int)FSettings.SubFolder]) { foreach (string l in backupLocations) { try { //only create if not created yet, add date if the checkbox was checked if (fileSettings[(int)FSettings.AddDateToFileName] && !Directory.Exists(Path.Combine(l, fname + "_" + dt.Day + "-" + dt.Month + "-" + dt.Year))) { Directory.CreateDirectory(Path.Combine(l, fname + "_" + dt.Day + "-" + dt.Month + "-" + dt.Year)); } else if (!Directory.Exists(Path.Combine(l, fname))) { Directory.CreateDirectory(Path.Combine(l, fname)); } } catch (Exception ex) { displayText("Not able to create folder at '" + l + "' maybe invalid foldername or missing permissions?", 3000, "red"); Console.WriteLine(ex); return; } } } #endregion //used to give the background worker the information he needs var bDataEventArgs = new BackupDataArgs(dt, backupLocations, backupFiles, fileSettings, fname); progressBarMain.Value = 0; buttonOK.Enabled = false; //disable controls in the meantime groupBoxSettings.Enabled = false; backgroundWorkerBackup.RunWorkerAsync(bDataEventArgs); //everything is alright, we are ready to backup }