private void LoadBackups() { if (File.Exists(xmlUserdataDrives)) { XmlSerializer xs = new XmlSerializer(typeof(XML_Drives)); FileStream read = new FileStream(xmlUserdataDrives, FileMode.Open, FileAccess.Read, FileShare.Read); XML_Drives daten = (XML_Drives)xs.Deserialize(read); //Einlesen der BackupDrives foreach (string serialnumber in daten.backupDrives) { try { DriveInformation drive = new DriveInformation(); drive = drive.GetDriveInformation(serialnumber); //MessageBox.Show(drive.ToString()); DirectoryInfo backupInfo = new DirectoryInfo(drive.DeviceID + backupFolder); foreach (DirectoryInfo directoryInfo in backupInfo.GetDirectories()) { DirectoryInfo windowsImageBackup = new DirectoryInfo(directoryInfo.FullName + windowsImageBackupFolder); if (windowsImageBackup.Exists) { CheckBox backup = new CheckBox(); backup.Content = directoryInfo.Name; backup.Margin = new Thickness(0, 0, 5, 5); backup.ToolTip = directoryInfo.FullName; wp_Backups.Children.Add(backup); } } } catch (System.IO.DriveNotFoundException) { TextBlock driveNotFound = new TextBlock(); driveNotFound.Text = $"Achtung: Das Laufwerk mit der Seriennummer {serialnumber} konnte nicht gefunden werden.\nBackups von diesem Laufwerk können nicht angezeigt werden.\n"; driveNotFound.Background = Brushes.Red; sp_DrivesNotFound.Children.Add(driveNotFound); } catch (System.IO.DirectoryNotFoundException) { } } } }
private void bt_hinzufuegen_Click(object sender, RoutedEventArgs e) { try { //Überprüfen ob für die angehakten Laufwerke genügend Speicherpalatz vorhanden ist. double sizeNeeded = 0.00; double sizeAvailableBackupDrive = 0.00; //Ermittlung der benötigten Speichergröße foreach (object systemDrive in Stack_SystemDrives.Children) { if (systemDrive is CheckBox && (systemDrive as CheckBox).IsChecked == true) { DriveInformation systemDriveInformation = new DriveInformation(); systemDriveInformation = systemDriveInformation.GetDriveInformation((systemDrive as CheckBox).Content.ToString().Split('\t')[1]); sizeNeeded += (systemDriveInformation.Size - systemDriveInformation.FreeSpace); } } DriveInformation availableBackupDrive = new DriveInformation(); availableBackupDrive = availableBackupDrive.GetDriveInformation((lb_availableBackupDrives.SelectedItem as TextBlock).Text.ToString().Split('\t')[1]); sizeAvailableBackupDrive += availableBackupDrive.Size; if (sizeNeeded > sizeAvailableBackupDrive) { MessageBox.Show("Die Festplatte hat zu wenig Speicherplatz für die ausgewählten Laufwerke frei.", "Nicht genug Speicherplatz frei!", MessageBoxButton.OK, MessageBoxImage.Error); } else { TextBlock item = (lb_availableBackupDrives.SelectedItem as TextBlock); lb_availableBackupDrives.Items.Remove(lb_availableBackupDrives.SelectedItem); lb_backupDrives.Items.Add(item); //Löschen aus SystemDrives foreach (object drive in Stack_SystemDrives.Children) { if ((drive is CheckBox == true) && (drive as CheckBox).Content.ToString() == item.Text.ToString()) { Stack_SystemDrives.Children.Remove(drive as CheckBox); break; } } } } catch (System.NullReferenceException) { } }
/// <summary> /// Gibt eine Liste mit allen angeschlossenen Laufwerken zurück. Die Liste enthält DriveInformation Objekte /// </summary> /// <returns>List<DriveInformation></returns> public static List <DriveInformation> GetAllDrives() { //Objekt das der Liste hinzugefügt wird DriveInformation driveInformation = new DriveInformation(); //Liste mit allen angelschlossenen Laufwerken List <DriveInformation> erg = new List <DriveInformation>(); //Per WMI auf alle Laufwerke zugreifen ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_logicaldisk"); ManagementObjectCollection colDisks = mgmtObjSearcher.Get(); //Alle Laufwerke finden und hinzufügen foreach (ManagementObject objDisk in colDisks) { erg.Add(driveInformation.GetDriveInformation($"{objDisk["VolumeSerialNumber"]}")); } //Ergebnis zurückgeben aller Laufwerke als DriveInformation return(erg); }
/// <summary> /// Läd die Seite neu. und lädt die aktuelle User XML. /// </summary> private void LoadPage() { //Löschen der aktuellen Daten Stack_SystemDrives.Children.Clear(); lb_availableBackupDrives.Items.Clear(); lb_backupDrives.Items.Clear(); //Hinzufügen Systemdrives foreach (DriveInformation drive in DriveInformation.GetAllDrives()) { CheckBox checkDrive = new CheckBox(); checkDrive.Content = drive; checkDrive.Checked += cb_updateAvailableBackupDrive_Checked; checkDrive.Unchecked += cb_updateAvailableBackupDrive_Unchecked; Stack_SystemDrives.Children.Add(checkDrive); } //Einlesen der XML Daten if (File.Exists(xmlUserdataDrives)) { XmlSerializer xs = new XmlSerializer(typeof(XML_Drives)); FileStream read = new FileStream(xmlUserdataDrives, FileMode.Open, FileAccess.Read, FileShare.Read); XML_Drives daten = (XML_Drives)xs.Deserialize(read); //Einlesen der BackupDrives foreach (string serialnumber in daten.backupDrives) { DriveInformation drive = new DriveInformation(); //Neues Texblock Objekt für Listbox TextBlock backupDrive = new TextBlock(); try { drive = drive.GetDriveInformation(serialnumber); backupDrive.Text = $"{drive}"; backupDrive.Background = Brushes.Green; backupDrive.ToolTip = "Sicherungsfestplatte ist angeschlossen :)"; foreach (object disk in Stack_SystemDrives.Children) { if (disk is CheckBox) { if ((disk as CheckBox).Content.ToString().Split('\t')[1] == drive.VolumeSerialNumber) { Stack_SystemDrives.Children.Remove((disk as CheckBox)); break; } } } } catch (DriveNotFoundException) { backupDrive.Text = serialnumber; backupDrive.Background = Brushes.Red; backupDrive.ToolTip = "Sicherungsfestplatte ist nicht angeschlossen"; } lb_backupDrives.Items.Add(backupDrive); } //Überprüfung ob eine Systemdrive schon als BackupDrive registriert //Einlesen der Systemdrives checks foreach (string serialnumber in daten.systemDrivesSerialnumbers) { foreach (object systemdrive in Stack_SystemDrives.Children) { if ((systemdrive is CheckBox) == true && (systemdrive as CheckBox).Content.ToString().Contains(serialnumber)) { (systemdrive as CheckBox).IsChecked = true; } } } //Falls die Systemfestplatte nicht zur sicherung angehakt ist und die Festplatte noch nicht als Sicherungsfestplatte vorhanden ist wird diese den Verfügbaren zugeordnet. foreach (object systemdrive in Stack_SystemDrives.Children) { //Überprüfe Seriennummer von BackupDrive und Systemdrive //Nur wenn das Element in dem Stack der Systemdrives eine Checkbox ist if (systemdrive is CheckBox) { //Nur wenn das Laufwerk nicht zur Sicherung angehakt ist. if ((systemdrive as CheckBox).IsChecked == false) { //Überprüfung ob Laufwerk bereits bei den BackupDrives vorhanden ist TextBlock drive = new TextBlock(); drive.Text = (systemdrive as CheckBox).Content.ToString(); //Überprüfung ob Laufwerk bereits als BackupDrive registriert ist bool isAlreadyBackupDrive = false; foreach (TextBlock backupDrive in lb_backupDrives.Items) { if (backupDrive.Text.ToString() == (systemdrive as CheckBox).Content.ToString()) { isAlreadyBackupDrive = true; } } if (isAlreadyBackupDrive == false) { //Hinzufügen des Laufwerks zu den verfügbaren BackupDrives. lb_availableBackupDrives.Items.Add(drive); } } } } } }