Exemple #1
0
        /* Methode zum Kopieren eines Ordners */
        public static bool ExtCopy(string sourceFolderName, string destFolderName,
                                   CopyFaults copyFaults)
        {
            /* Datei-Überschreib-Flags voreinstellen */
            overwriteAllFiles = false;
            alreadyAskedForOverwriteAllFiles = false;

            // Rekursive Methode zum Kopieren der Unterordner und Dateien aufrufen
            CopySubFoldersAndFiles(new DirectoryInfo(sourceFolderName),
                                   sourceFolderName, destFolderName, copyFaults);

            // Erfolg zurückmelden
            return(copyFaults.Count == 0);
        }
Exemple #2
0
        /* Methode zum rekursiven Kopieren eines Ordners */
        private static bool CopySubFoldersAndFiles(DirectoryInfo folder,
                                                   string mainSourceFolderName, string mainDestFolderName,
                                                   CopyFaults copyFaults)
        {
            // Zielordner anlegen
            try
            {
                // Zielordnername ermitteln
                string destFolderName = folder.FullName.Replace(mainSourceFolderName,
                                                                mainDestFolderName);

                // Ordner anlegen
                Directory.CreateDirectory(destFolderName);
            }
            catch (IOException ex)
            {
                // Fehler in der CopyFaults-Auflistung dokumentieren
                copyFaults.Add(new CopyFault(false, mainSourceFolderName,
                                             mainDestFolderName, ex.Message));
            }

            // Alle Unterordner des übergebenen Ordners durchgehen
            DirectoryInfo[] subFolders = folder.GetDirectories();
            for (int i = 0; i < subFolders.Length; i++)
            {
                // Pfad für den Ziel-Unterordner ermitteln, indem der Pfad zum
                // Quellordner durch den Pfad zum Zielordner ersetzt wird
                string destSubFolderName = subFolders[i].FullName.Replace(
                    mainSourceFolderName, mainDestFolderName);

                // Funktion rekursiv aufrufen um zunächst die weiteren Unterordner
                // zu erzeugen
                CopySubFoldersAndFiles(subFolders[i], mainSourceFolderName,
                                       mainDestFolderName, copyFaults);
            }

            // Die im Ordner enthaltenen Dateien ermitteln
            FileInfo[] files = folder.GetFiles();

            // Alle Dateien durchgehen
            for (int i = 0; i < files.Length; i++)
            {
                // Ziel-Dateiname ermitteln, indem der Pfad zum Quellordner
                // durch den Pfad zum Zielordner ersetzt wird
                string destFileName = files[i].FullName.Replace(
                    mainSourceFolderName, mainDestFolderName);

                // Flag setzen, das festlegt, ob die Datei kopiert werden soll
                bool performCopyOperation;
                performCopyOperation = true;

                // Überprüfen, ob die Datei bereits existiert
                if (File.Exists(destFileName))
                {
                    // Fragen, ob die Datei überschrieben werden soll, falls der
                    // Anwender dies zuvor noch nicht für alle Dateien und Ordner
                    // gemeinsam bestätigt hat
                    if (overwriteAllFiles == false)
                    {
                        switch (MessageBox.Show("Die Datei '" + destFileName +
                                                "' existiert bereits.\r\n\r\n" +
                                                "Soll diese Datei überschrieben werden?",
                                                Application.ProductName, MessageBoxButtons.YesNoCancel,
                                                MessageBoxIcon.Question))
                        {
                        case DialogResult.Yes:
                            // Nachfragen, ob alle Dateien überschrieben werden
                            // sollen, falls dies noch nicht geschehen ist
                            if (alreadyAskedForOverwriteAllFiles == false)
                            {
                                switch (MessageBox.Show("Sollen alle im Zielordner " +
                                                        "vorhandenen Dateien überschrieben werden?",
                                                        Application.ProductName,
                                                        MessageBoxButtons.YesNoCancel,
                                                        MessageBoxIcon.Question))
                                {
                                case DialogResult.Yes:
                                    // Flag setzen, das das Überschreiben steuert
                                    overwriteAllFiles = true;
                                    break;

                                case DialogResult.Cancel:
                                    // Anwender hat abgebrochen: Ausnahme erzeugen,
                                    // da der Ordner nicht komplett kopiert werden
                                    // konnte
                                    throw new IOException("Benutzerabbruch");
                                }

                                // Festlegen, dass nicht mehr nachgefragt werden muss
                                alreadyAskedForOverwriteAllFiles = true;
                            }
                            break;

                        case DialogResult.No:
                            // Festlegen, dass die aktuelle Datei nicht kopiert
                            // werden soll
                            performCopyOperation = false;
                            break;

                        case DialogResult.Cancel:
                            // Anwender hat abgebrochen: Ausnahme erzeugen, da der
                            // Ordner nicht komplett kopiert werden konnte
                            throw new IOException(
                                      "Benutzerabbruch");
                        }
                    }
                }

                // Datei kopieren, wenn die Operation ausgeführt werden soll
                if (performCopyOperation)
                {
                    try
                    {
                        File.Copy(files[i].FullName, destFileName,
                                  true);
                    }
                    catch (Exception ex)
                    {
                        // Fehler in der CopyFaults-Auflistung dokumentieren
                        copyFaults.Add(new CopyFault(true, files[i].FullName,
                                                     destFileName, ex.Message));
                    }
                }
                else
                {
                    // Datei sollte nicht überschrieben werden: Fehler in der
                    // CopyFaults-Auflistung dokumentieren
                    copyFaults.Add(new CopyFault(true, files[i].FullName,
                                                 destFileName,
                                                 "Fehlende Anwender-Erlaubnis zum Überschreiben"));
                }
            }

            // Erfolg zurückmelden
            return(true);
        }