Laden...

FolderCopy mit Progressbar

Erstellt von zecken81 vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.966 Views
Z
zecken81 Themenstarter:in
86 Beiträge seit 2008
vor 14 Jahren
FolderCopy mit Progressbar

Hey Leute

ich habe aus dem www eine Funktion für das kopieren von Ordnern übernommen


public static void filework(string source, string destination)
        {
            // Ordner durchgehen
            foreach (string folder in Directory.GetDirectories(source))
            {
                // Ordnername extrahieren
                int index = folder.LastIndexOf("\\");
                string cop = folder.Substring(index + 1);
                Directory.CreateDirectory(destination + "\\" + cop);
                // rekursiver aufruf
                filework(folder, destination + "\\" + cop);
            }
            // Dateien durchgehen
            foreach (string filename in Directory.GetFiles(source))
            {
                int index = filename.LastIndexOf("\\");
                string cop = filename.Substring(index + 1);
                if (File.Exists(destination + "\\" + cop))
                {
                    File.Delete(destination + "\\" + cop);
                    File.Copy(filename, destination + "\\" + cop);
                }
                else
                {
                    File.Copy(filename, destination + "\\" + cop);
                }
            }

        }

diese Funktion rufe ich im Load Event mit


  filework(Ordner, BackOrdner);


auf

Da der Ordner aber sehr groß ist, würde ich gern eine Progressbar einfügen

Nun habe ich schon mehrere Anstätze ausprobiert.
U.a. eine neue Form einbinden mit einer ProgressBar und diese dann Aufrufen aber der Fortschiritt wird nicht angezeigt. Es wird der 1. Balken angezeigt und dann wird schon der Kopiervorgang ausgelöst und bis dieser vorbei ist denkt der Kunde sicherlich, dass da was abgeschmiert ist.

Hat jemand eine Idee wie ich das realisieren kann??

Mfg

3.825 Beiträge seit 2006
vor 14 Jahren

Hallo Zecken,

wenn Du viele kleine Dateien hast kannst Du Aktualisierung in Deine Routine einbauen. Wenn die Dateien ca. gleiche Größe haben dann einfach die Files zählen.

Wenn die Files unterschiedlich groß sind dann die Gesamtgröße ermitteln.

Wenn sehr große Dateien vorkommen dann würde beim Kopieren die Oberfläche einfrieren. In diesem Fall musst Du GUI und Kopieren trennen, siehe FAQ's.

Dein Code ist eher suboptimal :

Schau Dir mal die Methoden File... und Copy... an

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo zecken81,

siehe [FAQ] Warum blockiert mein GUI?

herbivore

M
194 Beiträge seit 2008
vor 14 Jahren

Hallo,

hab mich mal vor ner Weile mit Threads, die eine Fortschrittsanzeige zulassen beschäftigt. Dabei ist der folgende Code entstanden. Ich nutze diese Struktur sehr oft. Kannst ja mal schaun, vielleicht hilft dir das ja weiter:

mrleeh.de: Thread mit Fortschrittsanzeige

Greets

"Indem Sie über dieses ernste Thema lachen disqualifizieren Sie sich selbst."
mrleeh.de

125 Beiträge seit 2008
vor 14 Jahren

Sowas ähnliches hab ich auch mal gemacht.
Ich würde alle Dateien in einer Liste speichern und dann mit File.Copy die Dateien kopieren. Dann den ganzen Ablauf im Backgroundworkder aufrufen. Dann kannste auch den Fortschritt mitm progressbar anzeigen.

lg

M
120 Beiträge seit 2009
vor 14 Jahren

Im VB-Namensraum gibt's Klassen, die Standardfunktionen inkl. Fortschrittsdialog anbieten.

Ansonsten: Scriptable Shell Objects / CopyHere Method