Beim Kopieren Transferrate anzeigen

  • Gibt es schon ein skript mit dem mann dateien kopieren kann und dabei die Transferrate anzeigt ??

    Mit Prozent kenne ich es schon, aber die Rate würde mich interesieren !

  • Um das Thema noch mal aufzugreifen. Ist inzwischen schon so eine Methode aufgetaucht?

    Xenobiologist
    Die verbleibende Zeit würde aber auch reichen! (die Transferrate kann man ja dann daraus errechnen)
    Hast du denn eine Lösung für die verbleibende Zeit??

    Die Zeit sollte aber auch errchenet/angezeigt werden, wenn nur eine Datei kopiert wird!

    Hast du, Xenobiologist, oder jemand anders eine Lösung??

    mfg
    Leo.1906

  • Schon mal ein Anstoss, Transdauer kannst du ja selber noch hinzufügen.

    [autoit]

    $sourcefile = "C:\Dokumente und Einstellungen\Tom\Eigene Dateien\Downloads\wr_installer_04082008.exe"
    $destinationfile = @ScriptDir & "\test.exe"

    [/autoit][autoit][/autoit][autoit]

    ProgressOn ( "Copy....", "Copying file " & StringRegExpReplace ( $sourcefile, ".*\\(.*)\Z", "$1" ))

    [/autoit][autoit][/autoit][autoit]

    $callback = DllCallbackRegister ( "Progress" , "int", "uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr")
    $ptr = DllCallbackGetPtr ( $callback )

    [/autoit][autoit][/autoit][autoit]

    DllCall("kernel32.dll", "int", "CopyFileExA", "str" , $sourcefile , "str", $destinationfile, "ptr", $ptr , "ptr", 0, "int", 0, "int", 0)
    ProgressOff ()

    [/autoit][autoit][/autoit][autoit]

    Func Progress($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    ;~ ConsoleWrite ( $TotalBytesTransferred & @lf )

    [/autoit][autoit][/autoit][autoit]

    ProgressSet (round($TotalBytesTransferred/$TotalFileSize * 100, 0) , round($TotalBytesTransferred/$TotalFileSize * 100, 0) & "%")

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit]
  • Du müßtest um alle eine For oder While schleife setzten, und dies

    Spoiler anzeigen
    [autoit]

    $sourcefile = "C:\Dokumente und Einstellungen\Tom\Eigene Dateien\Downloads\wr_installer_04082008.exe"
    $destinationfile = @ScriptDir & "\test.exe"

    [/autoit]


    durch ein Array ersetzen wo du Quell und Zielfile dann angibst.

    MfG
    Der_Doc

  • Hast recht mit deiner Lösung, aber dabei werden alle dateien nacheinander kopiert. Das is für mich nich das Problem. Das Problem ist, wenn man mehrere dateien Kopiert möchte ich für alle dateien zusammen ne Prozentangabe^^

    Hast du da ne Ahnung, wie man das macht?

    mfg
    Leo.1906

  • Gibt es net vieleicht ne Funktion Filesize? Ich weis die gibt es unter PHP.
    Nur mal so die Theorie. Sollte es die Funktion geben, über den Ordner laufen lassen und bei jedem kopiertem File die Größe
    wieder abziehen. Ich hoffe ich bin verstanden worden ?(;)

    MfG
    Der_Doc

    • Offizieller Beitrag

    @Tom99: Gibt es eine Möglichkeit den Kopiervorgang bei Deiner Routine abzubrechen?

    Ich brauche nämlich auch gerade eine Multifile-Kopierfunktion und bin grad dabei, diese zu erstellen. Allerdings brauche ich die Möglichkeit, den Kopiervorgang abbrechen zu können.

    Edit: siehe _MultiFileCopy in "Scripte"

  • Es geht, aber GuiGetMsg und so geht nicht. Die ganze GUI ist beim Kopieren blockiert :(
    Kannst nur z.B. ESC abfragen:

    Spoiler anzeigen
    [autoit]

    #include <AVIConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <GuiButton.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <Misc.au3>
    ; Gui taken from http://www.autoitscript.com/forum/index.ph…60&#entry576255
    $sourcefile = "C:\WINDOWS\hidden.vol"
    $destinationfile = @ScriptDir & "\vistape11-base.rar.copy"
    FileDelete($destinationfile)

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=C:\Documents and Settings\Administrator\Bureaublad\Form1.kxf
    $Form1 = GUICreate("Copying...", 356, 238, 193, 125, BitOR($WS_CAPTION,$WS_POPUP,$WS_BORDER,$WS_CLIPSIBLINGS))
    $Avi1 = GUICtrlCreateAvi(@SystemDir & "\shell32.dll", 160, 0, 0, 355, 56, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
    $Progress1 = GUICtrlCreateProgress(8, 64, 336, 17)
    $Label1 = GUICtrlCreateLabel("From:", 8, 112, 36, 17)
    $Label2 = GUICtrlCreateLabel("", 56, 112, 338, 25)
    $Label3 = GUICtrlCreateLabel("Filecopy in progress...", 8, 88, 385, 17)
    $Label4 = GUICtrlCreateLabel("To:", 8, 152, 36, 17)
    $Label5 = GUICtrlCreateLabel("", 56, 151, 338, 25)
    $Button1 = GUICtrlCreateButton("Cancel", 285, 216, 59, 17, 0)
    ;~ GUICtrlSetOnEvent(-1, "Button1Click")
    $Label6 = GUICtrlCreateLabel("Approximately Remained Time:", 8, 184, 156, 17)
    $Label7 = GUICtrlCreateLabel("", 176, 184, 217, 17)
    $Label8 = GUICtrlCreateLabel("Already done:", 8, 208, 69, 17)
    $Label9 = GUICtrlCreateLabel("", 88, 208, 190, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    ;~ Sleep(10000)
    ;~ ProgressOn ( "Copy....", "Copying file " & StringRegExpReplace ( $sourcefile, ".*\\(.*)\Z", "$1" ))

    [/autoit] [autoit][/autoit] [autoit]

    $callback = DllCallbackRegister ( "Progress" , "int", "uint64;uint64;uint64;uint64;dword;dword;hwnd;hwnd;ptr")
    $ptr = DllCallbackGetPtr ( $callback )

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetData($Label2,$sourcefile)
    GUICtrlSetData($Label5,$destinationfile)
    $Timer = TimerInit()
    DllCall("kernel32.dll", "int", "CopyFileExA", "str" , $sourcefile , "str", $destinationfile, "ptr", $ptr , "ptr", 0, "int", 0, "int", 0)
    ;~ ProgressOff ()
    Sleep(500)
    GUIDelete()
    Func Progress($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    ;~ If GUIGetMsg() = $Button1 Then Return 1 ; Cancel Copying NICHT MIT GUIGetMSg arbeiten !!!, auch Sleeps nicht machen...
    ; Button State so verwenden :::
    If BitAND(_GUICtrlButton_GetState(GUICtrlGetHandle($Button1)),$BST_PUSHED) = $BST_PUSHED Then Return 1
    ;~ If WinActive($Form1) And _IsPressed("1B") Then Return 1

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $percDone = round($TotalBytesTransferred/$TotalFileSize * 100, 0)
    GUICtrlSetData($Label9,$TotalBytesTransferred & " Bytes from " & $TotalFileSize)
    GUICtrlSetData($Label7,Round((TimerDiff($Timer)/$percDone)*(100-$percDone)/1000,1) & "s") ; Millisekunden pro Prozent * RestProzent / 1000 ( damit Skeunden rauskommen )
    GUICtrlSetData($Progress1,$percDone); , round($TotalBytesTransferred/$TotalFileSize * 100, 0) & "%")

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit]
  • Gibt es keine Möglichkeit den Kopierprozess von der GUI zu lösen? Kenne das nur von Unix mit "&" hinter dem Befehl wird die Console wieder freigegeben.
    Aber ob es sowas unter Autoit gibt weis ich leider net.

    MfG
    Der_Doc

  • Nein, das geht leider nicht. Dafür bräuchtest du mehrere Threads. Allerdings gibt es doch im Eng. Forum so ne Multitasking-UDF. Und AdLib könnte auch gehen. Trotzdem bräuchtest du dafür eher OnEvent-Mode.

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)