Fortschrittanzeige beim Kopieren
-
Hallo
,ich habe vor beim kopieren einiger Dateien und Verzeichnisse
eine Fortschrittanzeige anzeigen zu lassen. Wie ich die als
Steuerelement einbinde und die Positionen setze ist mir bekannt.
Nur leider nicht, wie ich ermitteln kann wieviele Dateien noch
zu kopieren sind, bzw wie ich überhaupt weiss, wieviel Prozent
schon kopiert wurden.
Irgendwie muss ich die Anzeige des Progressbar ja an etwas
festmachen
Code zum kopieren:
SHFILEOPSTRUCT DatOp; DatOp.pFrom = "\\\\pc1\\backup\\26042004\0"; DatOp.pTo = "\\\\pc2\\backup\0"; DatOp.fFlags = FOF_SILENT|FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR|FOF_NOERRORUI; DatOp.wFunc = FO_COPY;Bei den bisher von mir verwendeten einfachen Fortschrittsanzeigen
war das alles kein Problem, da ich da die Positionen selbst über eine
Schleife festgelegt habe. Wie ich das nun in Abhängigkeit mit dem
Kopierstatus machen könnte ist mir aber noch absolut schleierhaft
-
Ihr habt sicher viel um die Ohren..oder war die Frage von mir wirklich
so banaldoof dass sie keine Würdigung verdient
Ich glaub diese Frage, wenn sie denn zu beantworten ist, wär sicher
auch sehr interessant für die FAQ dieser Seite.
Zumindest in mein Augen ist das mit dem kopieren schon ne wichtige
Sache.Auch wenns nur was fürs Auge des Anwenders ist und auch sicher ohne
auskommen würde.
-
Tja, die Frage ist wohl, wie groß die zu kopierenden Dateien sind.
Sollen 100 kleine 500KB Dateien kopiert werden, ist es sicherlich OK, wenn man erst die zu kopierenden Gesamtanzahl von Bytes addiert. Du kopierst ja eh alle Dateien einzeln. Also kannst du jedesmal, wenn du eine Datei fertig kopiert hast, den Status mit (Streifenbreite/Gesamtbytes * kopierteBytes) zeichnen.
Hast du dagegen eine große Datei, kannst du sie wohl nicht mehr "in einem Rutsch" schreiben. Sondern solltest das eben Häppchenweise (512 Byte Happen ?) tun, und jeweils erhöhen.
-
Hi,
ich muss eine ganze menge Dateien kopieren.Darunter sind kleine
txt aber auch große .zip
Ich habe aber keine Ahnung wie man überhaupt den Fortschritt
des Kopierens anzeigen kann
-
SHFileOperation kann selbst eine Fortschrittsanzeige erstellen (die gleiche wie sie im Explorer benutzt wird). Du musst nur die richtigen Flags in SHFILEOPSTRUCT benutzen. Oder willst du diesen Standard-Kopieren Dialog nicht??
-
Hi,
also wenn ich wüsste wie es damit geht wäre auch der
Standarddialog ok. Spart sicher eine menge Nerven und Arbeit !
Mir gehts nur darum mit dem eigentlichen Projekt weiter zu kommen
und nicht an dem Kopiervorgang hängen zu bleiben.
Hast du evtl. ein Beispiel, mit entsprechenden Flags, für mich ?
Das wäre
-
Wenn du FOF_SILENT aktivierst dann wirdt du auch keinen bekommen. SILENT = STILL = kein Fortschrittdialog.
Guckst du MSDN
-
So kann man Dateien kopieren:
SHFILEOPSTRUCT lpShFileStruct; CString text="Kopieren der Daten. Bitte warten Sie..."; lpShFileStruct.hwnd = NULL; lpShFileStruct.pFrom = "C:\\Programme\\Ordnerxyz\\*.*\0"; lpShFileStruct.pTo = "C:\\test123\0"; lpShFileStruct.wFunc = FO_COPY; lpShFileStruct.fFlags = FOF_SIMPLEPROGRESS ; lpShFileStruct.lpszProgressTitle = text; SHFileOperation(&lpShFileStruct);Es wird eine Dialogbox angezeigt die eine Progressbar enthält.
Warum aber
lpShFileStruct.fFlags = FOF_SIMPLEPROGRESS | FOF_NOCONFIRMMKDIR | FOF_NOCONFIRMATION;keine Progressbar bzw Dialogbox mehr ausgibt, keine Ahnung.
Nicht vergessen
#include "shellapi.h"und im Linker shell32.lib