Gesamtgröße ermitteln?!

  • Hallo Zusammen!

    Vor kurzem habe ich einen Thread erstellt, in dem es um die genau
    Berechnung für einen "ProgressBar" ging. Hat auch super funktioniert.

    Nun würde ich gern einen zweiten DownloadBalken hinzufügen, der aber
    nicht wie der erste, den Fortschritt der derzeitigen Datei anzeigt, sondern
    den Gesamtfortschritt wiedergibt.

    Ich hab schon einiges versucht, bekomms aber nicht wirklich hin.

    Die einzelnen Dateien werden hier ausgelesen:

    [autoit]

    $file = @TempDir & "\files.txt"
    InetGet($patch_url & "\files.txt" , $file)
    $lines = _FileCountLines($file)

    [/autoit]

    ... dann wird die Größe der Datei berechnet ....

    [autoit]

    While ($lines >= 1)
    $datei = FileReadLine($file, $lines)

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

    $file_size = InetGetSize($patch_url & "\" & $datei) / 1048576
    $size_inet = Round($file_size, 2)
    $size_inet_orig = InetGetSize($patch_url & "\" & $datei)
    $size_ordner = FileGetSize($ScriptDir & "\" & $datei)

    [/autoit]

    .... und zum Schluss wird das ganze im Downloadbalken1 wiedergegeben ....

    [autoit]

    $hDownload = InetGet($patch_url & $datei , $ScriptDir& "\" & $datei , 1 , 1)

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

    While Not InetGetInfo($hDownload, 2)
    $size_file = InetGetInfo($hDownload,0) / 1048576
    $size_file_fin = Round($size_file, 2)
    $iPercent = (100 * $size_file) / $size_inet

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

    GUICtrlSetData($Progress1, $iPercent)

    [/autoit]

    Funktioniert ja auch alles super. Version 2.3 vom ganzen Script ist schon online
    nur würde ich gern für die Version 3.0 einen zweiten Balken (welcher schon
    vorhanden ist) welcher den Fortschritt aller Dateien anzeigt...

    Nun die Frage:
    Wie kann ich am einfachsten bei allen Dateien, die in der files.txt definiert
    sind, die größe Auslesen und z.B. als Text anzeigen lassen. Die Umsetzung
    in den Balken bekomm ich dann selbst hin. Nur es scheitert an der Abfrage
    aller Dateien.. :(

    MFG - Kurikinton

  • Hallo KuriKinton,

    du brauchst dazu 2 Schleifen. In der 1. holst du dir alle Dateigrössen (evtl. in Array zwischenspeichern) und addierst sie auf. In der 2. lädst du dann Datei für Datei herunter. Schau dir auch [ gelöst ] Eine Art Patcher an,

    mfg (Auto)Bert

  • Genau an dem Punk bin ich gerade. Ich bin irgendwie zu doof, die
    Größe aller Dateien abzufragen und diese zusammen zu rechnen...

    • Offizieller Beitrag

    Ich habe Dir mal ein Beispielscript erstellt:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Dim $aDownloadFiles[4] = ['http://www.autoitscript.com/cgi-bin/getfile.pl?autoit3/autoit-v3-setup.exe', _
    'http://www.autoitscript.com/autoit3/files/beta/autoit/autoit-v3.3.5.6-beta-setup.exe', _
    'http://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/download/SciTE4AutoIt3.exe', _
    'http://translation.autoit.de/autoitinfo/hilfedateien/AutoIt-Hilfe-Deutsch-3.3.6.0-Stand-24_03_10.zip']
    $hGui = GUICreate('AutoIt-Downloader', 400, 200)
    $hProgressAllLabel = GUICtrlCreateLabel('0%', 180, 12, 50, 16)
    $hProgressAll = GUICtrlCreateProgress(10, 30, 380, 20)
    $hProgressFileLabel = GUICtrlCreateLabel('0%', 180, 62, 50, 16)
    $hProgressFile = GUICtrlCreateProgress(10, 80, 380, 20)
    $hStop = GUICtrlCreateButton('Abbrechen', 150, 120, 80, 25)
    GUICtrlSetState(-1, $GUI_HIDE)
    $hStatus = GUICtrlCreateLabel('', -2, 180, 404, 20, Default, $WS_EX_CLIENTEDGE)
    GUISetState()
    Dim $iFileSizeAll, $aFileSize[UBound($aDownloadFiles)], $iDownloadSizeAll, $iPercent, $iPercentAll
    GUICtrlSetData($hStatus, ' Dateigrößen ermitteln!')
    For $i = 0 To UBound($aDownloadFiles) - 1
    $aFileSize[$i] = InetGetSize($aDownloadFiles[$i])
    $iFileSizeAll += $aFileSize[$i]
    Next
    GUICtrlSetState($hStop, $GUI_SHOW)
    For $i = 0 To UBound($aDownloadFiles) - 1
    $sFilename = StringRegExpReplace($aDownloadFiles[$i], '.+/(.+)', '$1')
    GUICtrlSetData($hStatus, ' Datei: "' & $sFilename & '"')
    $hDownload = InetGet($aDownloadFiles[$i], @TempDir & '\' & $sFilename, 1, 1)
    Do
    $aData = InetGetInfo($hDownload, -1)
    If GUIGetMsg() = $hStop Or @error Then
    InetClose($hDownload)
    ExitLoop 2
    EndIf
    $iPercent = Int(100 / $aFileSize[$i] * $aData[0])
    GUICtrlSetData($hProgressFile, $iPercent)
    GUICtrlSetData($hProgressFileLabel, $iPercent & '%')
    $iPercentAll = Int(100 / $iFileSizeAll * ($iDownloadSizeAll + $aData[0]))
    GUICtrlSetData($hProgressAll, $iPercentAll)
    GUICtrlSetData($hProgressAllLabel, $iPercentAll & '%')
    Until $aData[2]
    $iDownloadSizeAll += $aFileSize[$i]
    Next
    GUICtrlSetState($hStop, $GUI_HIDE)
    Sleep(1000)
    GUICtrlSetData($hStatus, ' Downloads abgeschlossen!')
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit]
  • Super Sache Oscar, nur wie schaut das aus, wenn die Anzahl der
    Dateien die runtergeladen werden sollen, nicht definiert ist, sondern
    aus einer *.txt ausgelesen werden, in der manchmal 3, manchmal 10
    stehen, welche auf einem Server / Webspace liegt?

    Ich hab mal dein Script bischen verwendet....

    Könntest du mir vielleicht den Downloadbalken (der untere) so umbasteln,
    dass es funktioniert? Hab dafür noch nix gebastelt, bzw. wieder gelöscht.
    Irgendwie bin ich zu blöd dafür ... hier mal das ganze Script:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region
    #AutoIt3Wrapper_icon=..\Version 1.0\loader\icon.ico
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_UseX64=n
    #AutoIt3Wrapper_Res_Description=http://www.frostlab.de
    #AutoIt3Wrapper_Res_Fileversion=2.3.3.3
    #AutoIt3Wrapper_Res_LegalCopyright=http://www.frostlab.de
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion
    ;#########################################################################################;
    ;#################### BANKO DOWNLOADER - COPYRIGHT 2010 FROSTLAB.DE ######################;
    ;#########################################################################################;
    #Include <File.au3>
    #Include <GuiConstants.au3>
    #include <IE.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    ;#########################################################################################;
    Global $ScriptDir = @ScriptDir
    Global $TempDir = @TempDir
    Global $patch_url = FileReadLine($ScriptDir & "\" & "loader\banko.ini", 1)
    ;#########################################################################################;
    Opt("GUIOnEventMode", 1)

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

    $hGui = GUICreate('Banko 3.0', 400, 105)
    $hProgressAll = GUICtrlCreateProgress(10, 40, 380, 20)
    $hProgressFile = GUICtrlCreateProgress(10, 10, 380, 20)
    $hStop = GUICtrlCreateButton('Beenden', 310, 70, 80, 25)
    GUICtrlSetOnEvent($hStop, "_close")
    $hStatus = GUICtrlCreateLabel('Verbindung zum Server wird hergestellt...', 10, 71, 290, 24, Default, $WS_EX_CLIENTEDGE)
    GUISetState(@SW_SHOW)
    ;#########################################################################################;
    Func _close ()
    Exit
    EndFunc
    patch ()
    ;#########################################################################################;
    Func patch ()
    $file = @TempDir&"\files.txt"
    InetGet( $patch_url&"\files.txt" , $file)
    $lines = _FileCountLines($file)

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

    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 1))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 2))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 3))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 4))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 5))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 6))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 7))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 8))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 9))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 10))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 11))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 12))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 13))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 14))
    DirCreate(FileReadLine($ScriptDir & "\" & "loader\folder.ini", 15))

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

    While ($lines >= 1)
    $datei = FileReadLine($file, $lines)

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

    If $lines = 0 Then
    MsgBox(48,"Fehler","Verbindung zum Server konnte nicht hergestellt werden!")
    Exit
    EndIf

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

    $file_size = InetGetSize($patch_url & "\" & $datei) / 1048576
    $size_inet = Round($file_size, 2)
    $size_inet_orig = InetGetSize($patch_url & "\" & $datei)
    $size_ordner = FileGetSize($ScriptDir & "\" & $datei)

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

    If FileExists($ScriptDir & "\" & $datei) Then
    If @error Then
    MsgBox(48,"Fehler", "Verbindung zum Server konnte nicht hergestellt werden!")
    EndIf

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

    If $size_inet_orig <> $size_ordner Then
    GUICtrlSetData($hStatus," Download: " & "'" & $datei & "...")
    $hDownload = InetGet($patch_url & $datei , $ScriptDir& "\" & $datei , 1 , 1)
    While Not InetGetInfo($hDownload, 2)
    $size_file = InetGetInfo($hDownload,0) / 1048576
    $size_file_fin = Round($size_file, 2)
    $iPercent = (100 * $size_file) / $size_inet
    GUICtrlSetData($hProgressFile, $iPercent)
    sleep (50)
    WEnd
    GUICtrlSetData($hProgressFile, 100)
    Else
    GUICtrlSetData($hStatus," Überspringe '" & $datei & "' - Bereits vorhanden!")
    EndIf

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

    EndIf
    sleep (500)
    $lines = $lines-1
    WEnd
    while 1
    Sleep(100)
    Exit
    WEnd
    EndFunc

    [/autoit]

    Also wie gesagt, es funktioniert ja alles. Es werden die gewünschten
    Ordner erstellt und die Dateien in diese runtergeladen. Allerdings krieg
    ich die Abfrage für den 2ten Downloadbalken, also der, der die Gesamtgröße
    aller Dateien anzeigt nicht hin... :(

    6 Mal editiert, zuletzt von Kurikinton (5. Mai 2010 um 01:09)

  • Hallo Kurikinton,

    nimm doch einfach das Beispiel von Oscar und passe es an deine Bedürfnisse an:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $hGui = GUICreate('AutoIt-Downloader', 400, 200)
    $hProgressAllLabel = GUICtrlCreateLabel('0%', 180, 12, 50, 16)
    $hProgressAll = GUICtrlCreateProgress(10, 30, 380, 20)
    $hProgressFileLabel = GUICtrlCreateLabel('0%', 180, 62, 50, 16)
    $hProgressFile = GUICtrlCreateProgress(10, 80, 380, 20)
    $hStop = GUICtrlCreateButton('Abbrechen', 150, 120, 80, 25)
    GUICtrlSetState(-1, $GUI_HIDE)
    $hStatus = GUICtrlCreateLabel('', -2, 180, 404, 20, Default, $WS_EX_CLIENTEDGE)
    GUISetState()
    Global $patch_url = FileReadLine(@ScriptDir & "\" & "loader\banko.ini", 1)
    $file = @TempDir&"\files.txt"
    InetGet( $patch_url&"\files.txt" , $file)
    $aDownloadFiles = _FileReadToArray($file)

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

    #cs ;unnötig da in deinem Original-Skript darin keine Dateien abgelegt werden
    DirCreate(FileReadLine($aDownloadFiles[ 0])
    DirCreate(FileReadLine($aDownloadFiles[ 1])
    DirCreate(FileReadLine($aDownloadFiles[ 2])
    DirCreate(FileReadLine($aDownloadFiles[ 3])
    DirCreate(FileReadLine($aDownloadFiles[ 4])
    DirCreate(FileReadLine($aDownloadFiles[ 5])
    DirCreate(FileReadLine($aDownloadFiles[ 6])
    DirCreate(FileReadLine($aDownloadFiles[ 7])
    DirCreate(FileReadLine($aDownloadFiles[ 8])
    DirCreate(FileReadLine($aDownloadFiles[ 9])
    DirCreate(FileReadLine($aDownloadFiles[ 10])
    DirCreate(FileReadLine($aDownloadFiles[ 11])
    DirCreate(FileReadLine($aDownloadFiles[ 12])
    DirCreate(FileReadLine($aDownloadFiles[ 13])
    DirCreate(FileReadLine($aDownloadFiles[ 14])
    #ce

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

    Dim $iFileSizeAll, $aFileSize[UBound($aDownloadFiles)], $iDownloadSizeAll, $iPercent, $iPercentAll
    GUICtrlSetData($hStatus, ' Dateigrößen ermitteln!')
    For $i = 15 To UBound($aDownloadFiles) - 1
    $aFileSize[$i] = InetGetSize($aDownloadFiles[$i])
    $iFileSizeAll += $aFileSize[$i]
    Next
    GUICtrlSetState($hStop, $GUI_SHOW)
    For $i = 0 To UBound($aDownloadFiles) - 1
    $sFilename = StringRegExpReplace($aDownloadFiles[$i], '.+/(.+)', '$1')
    GUICtrlSetData($hStatus, ' Datei: "' & $sFilename & '"')
    $hDownload = InetGet($aDownloadFiles[$i], @TempDir & '\' & $sFilename, 1, 1)
    Do
    $aData = InetGetInfo($hDownload, -1)
    If GUIGetMsg() = $hStop Or @error Then
    InetClose($hDownload)
    ExitLoop 2
    EndIf
    $iPercent = Int(100 / $aFileSize[$i] * $aData[0])
    GUICtrlSetData($hProgressFile, $iPercent)
    GUICtrlSetData($hProgressFileLabel, $iPercent & '%')
    $iPercentAll = Int(100 / $iFileSizeAll * ($iDownloadSizeAll + $aData[0]))
    GUICtrlSetData($hProgressAll, $iPercentAll)
    GUICtrlSetData($hProgressAllLabel, $iPercentAll & '%')
    Until $aData[2]
    $iDownloadSizeAll += $aFileSize[$i]
    Next
    GUICtrlSetState($hStop, $GUI_HIDE)
    Sleep(1000)
    GUICtrlSetData($hStatus, ' Downloads abgeschlossen!')
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit]

    mfg (Auto)Bert

  • Danke, nur das was du auskommentiert hast, wird benötigt :)
    Es werden die Ordner erstellt in denen die einzelnen Dateien liegen,
    damit diese im gleichen Ordner landen... z.B. Grafik, Musik, etc...

    PS: Das Script was du geschrieben hast, funktioniert nicht ?(

    Einmal editiert, zuletzt von Kurikinton (5. Mai 2010 um 21:54)