File Download beschtimmter datein

  • Hallo, ich habe mal eine Frage und zwar folgenes
    Ich bin admin eines Gameservers und da wir des öffters neue maps testen wollte ich ein kleines Srcipt umschreiben
    das Automatisch die maps von ein Webserver läd.
    Habe auch was gefunden

    Spoiler anzeigen

    ;Tutorial by GtaSpider

    #include <GUIConstants.au3>

    ;Hier werden die Downloads als array deklariert. $FileToDownload[Wieviele downloads] = [Download1,Download2,...]
    Global $FilesToDownload[2] = ["http://127.0.0.1/moh_maps/Stalingrad_Snow2.pk3","http://127.0.0.1/moh_maps/User-merville.pk3"]
    ;Wieviele downloads es sind
    Global $Downloads = UBound($FilesToDownload)
    ;Wo die daten hingeladen werden sollen
    Global $DownloadDir = @ScriptDir

    ;Gui
    GUICreate("----{GLC}-----{Map DL Tool}-----", 476, 76, 193, 115)
    GUISetBkColor(1456)

    $Progress1 = GUICtrlCreateProgress(8, 8, 262, 9,$PBS_SMOOTH)
    $Progress2 = GUICtrlCreateProgress(8, 24, 262, 9,$PBS_SMOOTH)
    $StatLab = GUICtrlCreateLabel("",8,59,262,15)
    GUICtrlSetColor(-1,0xffffff)
    $Button = GUICtrlCreateButton("Start", 8, 37, 262, 20, 0)

    GUISetState()

    ;Mainwhile
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button
    If Not _Download() Then
    ;Wenn es bei _Download ein error gab (Abbrechen wurde gedrückt)
    GUICtrlSetData($Progress1,0)
    GUICtrlSetData($Progress2,0)
    GUICtrlSetState($Button,$GUI_DISABLE)
    GUICtrlSetData($Button,"Abgebrochen")
    Sleep(1500)
    GUICtrlSetData($Button,"Neustart")
    GUICtrlSetState($Button,$GUI_ENABLE)
    Else
    ;Wenn es kein error gab
    GUICtrlSetData($Button,"Erfolgreich")
    GUICtrlSetData($StatLab,"Komplett")
    EndIf
    EndSwitch
    WEnd


    ;Funktionen
    Func _Download()
    Local $i,$iSize,$iBuf,$msg,$iProz,$iOldProz,$sFileName
    GUICtrlSetData($Button,"Abbrechen (0%)"); Setze button
    For $i = 0 To $Downloads - 1
    $iSize = InetGetSize($FilesToDownload[$i]);Holt sich die größe des downloads
    $sFileName = StringTrimLeft($FilesToDownload[$i],StringInStr($FilesToDownload[$i],"/",1,-1));Der Dateiname des downlaods
    InetGet($FilesToDownload[$i],$DownloadDir&"\"&$sFileName,0,1);Datei wird gedownloadet
    GUICtrlSetData($StatLab,"Download: "&$sFileName &" (0%)");Setze statuslabel
    While @InetGetActive; Solange der Download aktiv ist
    $msg = GUIGetMsg(); Falls Abbrechen gedrückt wird
    If $msg = $Button Then Return InetGet("abort")-1 ; Return ((Returnwert von Inetget = 1) - 1) = 0
    $iProz = Round(100*@InetGetBytesRead/$iSize);Gibt die Prozentzahl (gerundet) zurück
    If $iProz <> $iOldProz Then;Wenn neue Prozentangaben <> alte Prozentangaben dann.. (Verhinder mögliches Flickern von Label/Button)
    $iOldProz = $iProz;Setze alte Prozentangabe = neue Prozentangabe
    GUICtrlSetData($Progress1,$iProz);Setze Progress 1 mit Prozentangabe des momentanen downlaods
    GUICtrlSetData($Progress2,$iBuf+($iProz/$Downloads));Setze Progress 2 auf die Insgesamte Prozentanzahl
    GUICtrlSetData($Button,"Abbrechen ("&Round($iBuf+($iProz/$Downloads))&"%)");Setze Abbrechenbutton
    GUICtrlSetData($StatLab,"Download: "&$sFileName &" ("&$iProz&"%)");Setze Statuslabel mit Dateiname des downlaods und prozentangabe des downlaods
    EndIf

    Sleep(50) ;Damit Prozessorlast < 100%
    WEnd
    $iBuf += (100/$Downloads)
    Next
    Return 1
    EndFunc


    Nur muss mann da ja die kompletten dateiname angeben gibt es da ne möglichkeit das das script alle *.pk2 vom Server läd ohne die dateinnamen anzugeben ???
    haben schon paar sachen probiert aber es klappt nicht
    höffe es kann mir jemand helfen :love:


    MfG myxin

  • Wo maps Liegen ist http / ftp mir währe es lieber es nur per http abzuhohlen damit mann nicht so leicht mein ftp login daten kommt.

    Einmal editiert, zuletzt von myxin (19. Mai 2008 um 14:25)

  • Du kannst WGet dafür benutzen ...

    WGet.exe
    Benötigte Dlls
    WGet Hilfe

    [autoit]

    $pidWGet = Run('wget.exe -v -t inf -c -A.pk2 -P"' & $szDestDir & '" "' & $szUrl & '"', $szDestDir, @SW_HIDE, 4)

    [/autoit]

    Der Parameter '-A.pk2' gibt an, dass alle *.pk2 Dateien von der angegebenen Url heruntergeladen werden ... ;)

    Einfach mal die WGet Hilfe durchlesen, da findest Du alles nötige ...


    Gruß
    Greenhorn


  • Das geht aber auch nur, wenn das Directory Listing angeschaltet ist, oder? Dann kann man das aber auch mit AutoIt machen :)

  • Das geht aber auch nur, wenn das Directory Listing angeschaltet ist, oder? Dann kann man das aber auch mit AutoIt machen :)

    Das weiß ich nicht, mein Bester.

    Von Servern und deren Handhabung habe ich leider keinen Plan. :whistling:
    Wen es denn auch mit AutoIt geht, dann ist gut ... :)


    Gruß


  • Wenn du das auf deinem Server als list.php im Verzeichnis mit den pk2 Dateien speicherst


    Dann kannst du im Skript so darauf zugreigen:

    [autoit]

    #include <Inet.au3>
    $listString = _InetGetSource("123.456.789.12/moh_maps/list.php")
    If StringRight($listString,1) = @LF Then $listString = StringTrimRight($listString,1)
    Global $FilesToDownload[2] = StringSplit($listString,@LF)

    [/autoit]


    In deinem Skript musst du dann noch
    For $i = 0 To $Downloads - 1
    ändern in, da im Array[0] die Anzahl steht.
    For $i = 1 To $Downloads - 1