FTP Ordner auslesen + Download

  • Hey leute also ich habe folgendes Anliegen ^^
    Ich würde gerne für meinen CS :S Clan ein Tool schreiben womit sie einfach einen bestimmten FTP-Ordner
    auslesen können und die Dateien (oder auch nur eine Datei) anklicken können (aus dem ausgelesenen FTP-Ordner)
    und diese dann per Button downloaden können.

    Gibt es sowas vielleicht schon irgendeiner weise?
    Ich habe leider nichts gefuden weder hier im Forum noch bei unserem Freund google ;)

    Würde mich über jede kleine Hilfe sehr freuen.
    Bin ganz neu in Autoit...

    mfg Fredooo

    //Edit:
    Habe das Tutorial mit dem 2Progressbar mal durchgelesen und bissel abgeändert...
    Es funktioniert, dass ich eine "vorher im Code festgelegte" Datei per ftp downloaden kann...
    Also könnte man vielleicht einfach umstellen dass man den FTP ordner ausliest?

    //Edit again:

    habe soeben ein neues kleines Problem entdeckt :)
    So weit funzt vieles schon (autodownload funzt auch schon.
    Ich wollte es so machen, dass man in einem Textfeld eingibt den Namen der Datei.
    Nun kann ich allerdings nicht über:

    [autoit]

    $demoname = GUICtrlCreateInput("demo_de_cbble_27_12", 432, 8, 265, 21)

    [/autoit]

    und dann:

    [autoit]

    Global $FilesToDownload[1] = ["http://www.meine-seite.de/"&$demoname&".dem"]

    [/autoit]

    den Download starten.
    Er nimmt als $download dann immer den Wert 8
    Woran könnte das liegen?

    3 Mal editiert, zuletzt von Fredooo (24. Januar 2008 um 23:47)

  • Hallo.

    Ist der FTP-Ordner auf Deinem PC oder auf einem externen Gerät.
    Ich habe hier gerade das Thema mit der Buffalo-Linkstation gehabt und mir wurde super geholfen. Vielleicht ist da auch Deine Hilfe zu finden. Nutze mal die Suchfunktion mit dem Begriff: Buffalo oder autoit1.

    Hoffe das ich Dir so etwas helfen konnte.

    LG, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Moin,

    du must den input auslesen: GUICtrlRead($demoname)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Global $url

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

    GUICreate("My GUI") ; will create a dialog box that when displayed is centered
    $demoname = GUICtrlCreateInput("demo_de_cbble_27_12", 8, 8, 265, 21)
    $button = GUICtrlCreateButton("Zeige Url",8,30)

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

    GUISetState (@SW_SHOW) ; will display an empty dialog box

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $button

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

    Global $url = "http://www.meine-seite.de/" & GUICtrlRead($demoname) & ".dem"
    MsgBox(64,"Url",$url)
    EndSelect

    Wend

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • danke schonmal für die Antworten.
    Es besteht nun ein weiteres Problem mit dem Quelltext.
    Wenn ich den original Quellcode von dir nehme McPoldy dann kann ich den Inputtext auch abändern.
    Also dass ich was anderes eingebe, und er nach dem Button drücken auch den anderen inhalt der Variabeln benutzt.

    Jedoch funktioniert das bei meinem Quelltext leider nicht, er nimmt imer den Inhalt der schon im Quelltext als Text drinne steht. :(
    Woran kann das liegen?

    Ich poste mal den kompletten Quelltext damit ihr euch die ganze Sache mal anschauen könnt. (netter Weise)

    Spoiler anzeigen
    [autoit]

    #include
    ;Gui
    GUICreate("GBG-Autoloader", 276, 76, 193, 115)
    $_1 = GUICreate("Test", 712, 353, 214, 132)
    GUISetBkColor(0x000000)
    $Progress1 = GUICtrlCreateProgress(440, 272, 262, 9, $PBS_SMOOTH)
    $Progress2 = GUICtrlCreateProgress(440, 296, 262, 9, $PBS_SMOOTH)
    $StatLab = GUICtrlCreateLabel("", 440, 251, 262, 15)
    GUICtrlSetColor(-1, 0xFFFFFF)
    $Button = GUICtrlCreateButton("Start", 440, 317, 262, 20)
    $content = GUICtrlCreateEdit("", 8, 8, 409, 337)
    GUICtrlSetData(-1, StringFormat("~~~~~ GBG-Demoloader ~~~~~~\r\n+ Starten\r\n+ Demo auswählen\r\n+ Downloaden\r\n+ Anschauen\r\n\r\nViel Spaß mit unserem Tool"))
    $demoname = GUICtrlCreateInput("demo_de_cbble_27_12", 432, 8, 265, 21)
    $ListView1 = GUICtrlCreateListView("", 432, 32, 265, 217)
    GUISetState(@SW_SHOW)

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

    ;URL der Datei angeben
    Global $url = "ftp://username:userpw@userurl" & GUICtrlRead($demoname) & ".dem"
    ;Hier werden die Downloads als array deklariert. $FileToDownload[Wieviele downloads] = [Download1,Download2,...]
    Global $FilesToDownload[1] = [$url]
    ;Wieviele downloads es sind
    Global $Downloads = UBound($FilesToDownload)
    ;Wo die daten hingeladen werden sollen
    Global $DownloadDir = "DEMOS"

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

    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

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

    ;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

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

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

    [/autoit]
  • Öhm wundert mich nicht das es bei dir nicht geht :)

    Du liest in Zeile 18 den Inhalt ein mit : GUICtrlRead($demoname)

    Das solltest du erst machen wenn jemand den Button gedrückt hat.

    Probier es mal, falls du sonst noch Fragen hast immer her damit.

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • ja eine doofe frage :)
    Wo muss ich das dann wie hinter dem Button einbinden?

    (und noch ne kleine Zusatzfrage:
    Kann ich auch den Inhalt eines FTP-Ordners auslesen lassen und jede Datei in eine Listbox oder Dropdown menu einfügen lassen?

    /Edit:
    Alles klar mit dem nach dem Button hab ich hinbekommen :)
    jetzt würd ich nur noch gerne wissen ob man den Ordner auslesen lassen kann...?
    Oder zumindest eine Textdatei dort einfügen kann damit ich eine (vielleicht durch php erstellte txt Datei) einfügen kann.

  • Deine Zeilen 18,20,22 müssen vor die For-Schleife zwischen Zeile 57 und 58.

    Die Variablen müssen meiner Meinung nach dann auch nur Local sein, weil sie außerhalb der Funktion nicht gebraucht werden.
    Außerdem ist die For-Schleife überflüssig, wenn man nur 1 Download macht ( es wird nur $FileToDownload[1] benutzt). Oder habe ich weiter Inputfelder für Demonnamen übersehen ?

    Prinzipiell sollte man alle sich verändernden Variablen der Zeilen 17-24, hinter das "Case $button" der GUI-While-Wend-Schleife oder in die Funktion "_Download()" packen.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • ne ne is schon richtig, dass keine weiteren Inputfelder sind.
    Ich wollte in einer weiteren Version es so versuchen, dass ich eine Liste includen lasse (vielleicht eine einfache TXT) die alle Demonamen beinhaltet und diese sollen dann in einer DropDownliste oder ListBox angezeigt werden
    und man soll mehrere Demos anwählen können und downloaden können...
    aber weiß nicht wirklich ob das so einfach is ^^
    Ansonsten muss man eben immer nur eine Demo downloaden.

  • Mach das doch so:
    DateiListe.txt auf dem Server

    [autoit]

    -> InetGet DateiListe.txt nach templist.txt

    [/autoit]
    Aufbau_Liste
    Code
    demo_de_cbble_27_12
    demo_de_cbble_we45z
    demo_gdigtfkj
    ...
    [autoit]

    $files = FileRead( templist.txt )
    $files = Stringreplace($files,@CRLF,"|")
    $COMBO = GUICtrlCreateCombo ("Dateiliste nicht geladen", 10,10,-1,-1,$CBS_DROPDOWNLIST)
    ;$CBS_DROPDOWNLIST damit man keine eigenen Namen eintragen kann
    If $files <> "" Then GUICtrlSetData($COMBO,"|" & $files)

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

    ;Auslesen:
    GUICtrlRead($COMBO)

    [/autoit]
  • danke für dei Antwort :)
    Aber ich versteh da nur Bahnhof.

    Soll ich auf den Server eine DateiListe.txt packen?
    Den Aufbau der Datei versteh ich ja...alle Namen der Dateien erstellen.
    Aber wo muss

    [autoit]

    -> InetGet DateiListe.txt nach templist.txt

    [/autoit]

    hin?

  • Am Anfang deines Skripts musst du mit
    InetGet ( "URL" [,"filename" [, reload [, background]]] )
    die Dateiliste runterladen.

  • jut danke habs jetz verstanden :)
    Er lädt mir die Datei auch vom Server nur zeigt er mir den Inhalt nicht in der Dropdownliste an
    und die Datei die er mir runterlädt sieht auch komisch aus...
    immer mit kleinen Vierecken anstatt den zeilenumbrüchen...
    Muss ich noch etwas beachten?!

  • hmm.
    Dann hat die Datei warscheinlixh nur @LF statt @CRLF. Das musst du dann in Stringreplace austauschen.
    Und zum Testen kannst du ja mal vor und nach
    $files = Stringreplace($files,@LF,"|")
    eine MsgBox(0,"",$files) einfügen

  • also in den messageboxen kommt jetz davor
    demoname
    demoname2
    demoname3
    usw.

    und danach kommt
    demoname1|demoname2|demoname3

    Aber in der Dropdownliste is immer noch nix drinne :(

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    GUICreate("My GUI combo") ; will create a dialog box that when displayed is centered

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

    $files = FileRead( "G:\templist.txt" )
    $files = Stringreplace($files,@CRLF,"|")
    $COMBO = GUICtrlCreateCombo ("Dateiliste nicht geladen", 10,10,-1,-1,$CBS_DROPDOWNLIST)
    ;$CBS_DROPDOWNLIST damit man keine eigenen Namen eintragen kann
    If $files <> "" Then GUICtrlSetData($COMBO,"|" & $files)

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

    GUISetState ()

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    Wend

    [/autoit]


    Das geht bei mir...

  • es funktioniert jetzt :) danke dir :)
    Noch eine klitzekleine zusatzfrage (mal wieder)
    Geht es auch, dass wenn man eine auswählt aus der DropDownliste dass er sie gleich weiter gibt in ein Inputfeld?!

    //Edit:
    Alles klar hat sich erledigt habe es einfach so gelöst, dass ich nur noch die DropDownliste habe :)
    Ich bedanke mich bei allen beteiligten Helfern :)

    PS. irgendwie konnte man doch beim Kompilieren auch angeben wie der Autor heist usw.
    Also alle Eigenschaften der .exe Datei bestimmen.
    Rechtsklick auf die .exe Eigenschaften Dateinformationen wie konnte man das machen? ^^

    Einmal editiert, zuletzt von Fredooo (25. Januar 2008 um 15:46)

  • alles klar dangeschön :)
    kann man es auch irgendwie realisieren, dass das Tool überprüft ob eine Datei mit dem (aus dem DropDownMenu ausgewählten) Namen bereits vorhanden ist und dann eine Meldung ausgibt bzw. eine Variable anders belegt?!