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
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
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
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
Im VB-Namensraum gibt's Klassen, die Standardfunktionen inkl. Fortschrittsdialog anbieten.
Ansonsten: Scriptable Shell Objects / CopyHere Method