Welche Schleife muss ich hier nehmen ?

  • Hallo nochmals ...

    Folgende Frage habe ich.

    Ich möchte mit AutoIT eine Datei von A nach B kopieren, welche z.B. 200 MB gross ist. Hierzu möchte ich gerne eine ProgressBar anzeigen lassen.

    Das Beispiel aus der Hilfe ...

    [autoit]

    ProgressOn("Fortschritt", "Erhöhungsschritte in Sekunden", "0 Prozent")
    For $i = 10 to 100 step 10
    sleep(1000)
    ProgressSet( $i, $i & " Prozent")
    Next
    ProgressSet(100 , "Fertig", "Komplett")
    sleep(500)
    ProgressOff()

    [/autoit]

    ... bringt mich nicht so richtig weiter. Aber ich vermute mal, ich habe hier einfach einen geistigen Hänger :rofl:

    Also ich verstehe das so:

    Solange eine Variable "$i" einen bestimmten Wert NICHT erreicht hat, durchlaufe die Schleife -> führe eine Anwendung aus (hier einen Sleep) -> erhöhe die Variable "$i". Wenn die Variable "$i" Ihren Wert erreicht hat, verlasse die Schleife.

    Mein Problem ist hier die Anwendung Sleep !

    In dem Beispiel wird bei jedem Durchlauf der Schleife "kurz geschlafen".

    Was passiert aber, wenn ich anstatt von Sleep meinen Kopierbefehl einfüge ? Dann würde ja vermutlich die Kopier Aktion immer wieder von vorne starten.

    Von daher suche ich eine "Schleife", die meine Kopieraktion "einmal" antriggert, und diese Schleife dann zu Ende ist, wenn die Kopier Aktion ebenfalls zu Ende ist.

    Könnte Ihr mir hier bitte ein kleines Beispiel Script zeigen ?

    vielen Dank

    Hassan

    Einmal editiert, zuletzt von HassanMullah (15. November 2010 um 12:21)

  • Du musst die Datei schon selbst kopieren.
    FileOpen im Binary-Modus (Flag 16) & FileRead nutzen, um die Quelldatei zu lesen.
    FileOpen im Schreib & Binary Modus (Flag 18) & FileWrite benutzen um die Quelldatei zu schreiben.

    Du musst also immer kleine Stücke mit FileRead lesen, die Progressbar aktualisieren und dann FileWrite anwenden, um mehrere kleine Stücke zu übertragen.

    So weit die Theorie - habe es selbst nicht probiert.

    • Offizieller Beitrag

    Beim Kopieren EINER Datei ist es nicht sehr sinnvoll eine Progressbaranzeige laufen zu lassen. Es ist ziemlich schwierig während des Kopiervorganges die bereits übertragene Datenmenge auszulesen und diesen Fortschritt in einem Progress anzuzeigen.
    Bei mehreren Dateien ist das kein Thema: entweder Fortschritt im Verhältnis zur Anzahl Dateien (10 Dateien, jede =10%) oder prozentualer Anteil des Datenvolumens einer Datei am Gesamtkopiervolumen.
    Bei einer Datei kannst du z.B. die von Windows verwendete Copy-Animation einblenden oder z.B. einfach eine Swipbar (hin- u. herlaufender Progress).

  • Hi!


    Habe mir da so weitergeholfen For next schleife die datein erste Proc... , darin eine While schleife die FileGetSize prüft daraus die zweite Proc.... füllen lassen datei für datei.

    Lg Kleiner

  • Hi!


    Spoiler anzeigen
    [autoit]

    For $i = 0 To UBound(Array_mit_Pfad_Datein) -1
    $i * 100 / Array_mit_Pfad_Datein = erste Progress
    $Size1 = FileGetSize(Pfad_Datei)
    Kopiervorgang starten
    While True
    FileGetSize(Pfad_Datei) an der stelle wo hin kopiert wird * 100 / $Size1
    zweite Progress füllen
    If $Size1 = FileGetSize(Pfad_Datei) an der stelle wo hin kopiert wird Then ExitLoop
    WEnd
    Next

    [/autoit]

    LG Kleiner

  • Zitat von Bugfix

    Bei einer Datei kannst du z.B. die von Windows verwendete Copy-Animation einblenden

    Wie geht denn das :confused:

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • Allgemeine Formel für die Darstellung von dem Prozentualen Progress ist

    Ist-wert/Maximal-Wert * 100

    Diese Formel kannst du dann ja entweder mit Dateigröße oder Dateien verwenden...;)

  • Oder einfach mal suchen: >>Klickmich<< (Zeile 48 auskommentieren für volle Geschwindigkeit)
    Wobei ich zugeben muss dass ich es wahrscheinlich auch nicht gefunden hätte wenn ich nicht gewusst hätte dass ich es mal geschrieben hatte. (wow - das waren mal viele Perfekt-Termini... :D )
    Sicherlich wird es da auch noch mehr Funktionen geben aber am besten ist sicherlich (und dazu wollen dich die anderen hier bewegen) es erstmal selbst zu probieren und nur wenn du nicht weiterkommst woanders Anregungen zu holen.

  • ... es erstmal selbst zu probieren und nur wenn du nicht weiterkommst woanders Anregungen zu holen.

    Hallo, erstmal vielen Dank. Das sieht ja schon sehr vielversprechend aus. Das mit dem Probieren werde ich dann machen, wenn ich die Zeit dazu habe. Momentan brennt mir leider ein wenig der Kittel und ich muss eine Lösung erstellen. Von daher werde ich in nächster Zeit auch noch öfters Fragen müssen.

    BTW: Was muss denn an Deinem Script angepasst werden, wenn man mit "*.*" und weiteren Unterverzeichnissen arbeiten will ?

    Gruss und vielen Dank für den Tipp

    Hassan

  • Wobei ich zugeben muss dass ich es wahrscheinlich auch nicht gefunden hätte wenn ich nicht gewusst hätte dass ich es mal geschrieben hatte. (wow - das waren mal viele Perfekt-Termini... :D )

    Wenn du die Zeit "Perfekt" meinst, dann waren es gar nicht soviele. Nämlilch haste genau 1 mal Perfekt benutzt, der Rest ist Konjunktiv :D
    Das musste ich mal eben gesagt haben :D
    /Deutsch-besser-wisser off


    Und für Fragen sind wir ja da, wenn wir genug Eigenleistung sehen ;)

  • Pinguin
    Tatsächlich - aber es klang trotzdem toll... ;) (und ich war mal Deutsch-Leistungskurs...)

    HassanMullah
    Deine Frage war wie man den Verlauf beim Kopieren einer Datei bewerkstelligt.
    Das und nur das kann die Funktion - nicht mehr.
    Willst du mehr musst du erstmal alle Dateien und Ordner einlesen (Suchfunktionsstichwort "Verzeichnis rekursiv") und dann alle damit abarbeiten.
    Oder du benutzt einfach mal die Suchfunktion des Forums denn dieses Problem wurde schon mehrfach gelöst:
    >>Beispiel<<