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


Anmelden zum Antworten