private void btnPerformRestore_Click(object sender, EventArgs e) { BackupFileItem bfi = (BackupFileItem)cbRestoreFile.SelectedItem; if (bfi == null) { tsStatus.ForeColor = Color.Black; tsStatus.Text = "Please select a file to restore."; return; } //Disable auto-snapshot while performing restore saveWatcher.EnableRaisingEvents = false; using (ZipArchive archive = ZipFile.OpenRead(bfi.FilePath)) { foreach (ZipArchiveEntry entry in archive.Entries) { try { entry.ExtractToFile(Path.Combine(SavePath, entry.Name), true); } catch (System.UnauthorizedAccessException uae) { if (entry.Name == "meshsave.txt") { continue; } else { string errorMessage = "Unable to restore save file " + bfi.DisplayName; errorMessage += "\n\nError with file: " + entry.Name; errorMessage += "\n\n\n" + uae.ToString(); MessageBox.Show(errorMessage, "Unable to restore", MessageBoxButtons.OK, MessageBoxIcon.Error); tsStatus.ForeColor = Color.Red; tsStatus.Text = "Restore failed - " + bfi.DisplayName; return; } } } } //Re-enable auto-snapshot if needed saveWatcher.EnableRaisingEvents = cbSnapshotEnabled.Checked; tsStatus.ForeColor = Color.Black; tsStatus.Text = "Restored backup " + bfi.DisplayName; }
private void updateView() { if (lblTimestamp.InvokeRequired) { var d = new SafeUpdateView(updateView); lblTimestamp.Invoke(d); } else { //Grab the current save file timestamp FileInfo fi = new FileInfo(Path.Combine(SavePath, "defaultES2File.txt")); if (fi.Exists) { DateTime saveFileTime = fi.LastWriteTime; lblTimestamp.Text = "Save Timestamp: " + saveFileTime.ToString("g"); btnPerformBackup.Enabled = true; } else { lblTimestamp.Text = "!! No MSC save found !!"; btnPerformBackup.Enabled = false; } //Search for backup files string[] listFiles = Directory.GetFiles(BackupFolder, "*.zip"); tsStatus.Text = listFiles.Length.ToString() + " backup(s) found"; //Skip reloading the backup file list if it hasn't changed if (listFiles.Length != backupFiles.Length) { backupFiles = new BackupFileItem[listFiles.Length]; for (int i = 0; i < listFiles.Length; i++) { backupFiles[i] = new BackupFileItem(); backupFiles[i].FilePath = listFiles[i]; string fileName = Path.GetFileName(listFiles[i]); string fileDate = fileName.Substring(16, 19); string comment = ""; if (fileName[35] == '_') { comment = " - " + fileName.Substring(36).Split('.')[0]; } string fileTime = fileDate.Split('T')[1]; fileTime = fileTime.Replace('-', ':'); fileDate = fileDate.Split('T')[0] + "T" + fileTime; string displayName = DateTime.Parse(fileDate).ToString("g") + comment; backupFiles[i].DisplayName = displayName; } cbRestoreFile.Items.Clear(); cbRestoreFile.Items.AddRange(backupFiles); } btnPerformRestore.Enabled = !(listFiles.Length == 0); } }