Example #1
0
        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)
                    {
                    }
                }
            }
        }
Example #2
0
        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 Informationen über ein Laufwerk mit dem entsprechenden Laufwerksbuchstaben
        /// </summary>
        /// <param name="laufwerkbuchstabe"></param>
        /// <returns>DriveInformation</returns>
        public DriveInformation GetDriveInformation(char laufwerkbuchstabe = 'c')
        {
            //Laufwerksbuchstabe in Großbuchstaben umwandeln

            laufwerkbuchstabe = Convert.ToChar(laufwerkbuchstabe.ToString().ToUpper());

            DriveInformation           erg             = new DriveInformation();
            ManagementObjectSearcher   mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_logicaldisk");
            ManagementObjectCollection colDisks        = mgmtObjSearcher.Get();

            //Alle Laufwerke finden und hinzufügen

            bool driveExists = false;

            foreach (ManagementObject objDisk in colDisks)
            {
                if (Convert.ToString(objDisk["DeviceID"]) == $"{laufwerkbuchstabe}:")
                {
                    erg.DeviceID = Convert.ToString(objDisk["DeviceID"]);

                    erg.VolumeSerialNumber = Convert.ToString(objDisk["VolumeSerialNumber"]);

                    erg.Size = Convert.ToDouble((objDisk["Size"]));

                    erg.FreeSpace = Convert.ToDouble((objDisk["FreeSpace"]));

                    erg.UsedSpace = erg.Size - erg.FreeSpace;

                    erg.VolumeName = Convert.ToString(objDisk["VolumeName"]);

                    driveExists = true;
                }
            }

            //Falls der Laufwerksbuchstabe nicht vorhanden => Exception
            if (driveExists == false)
            {
                throw new DriveNotFoundException();
            }

            return(erg);
        }
        /// <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);
        }
Example #5
0
        /// <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);
                            }
                        }
                    }
                }
            }
        }