Datei downloaden, und Status anzeigen

  • Hallo,
    ich möchte ein kleines Programm machen,
    was eine bestimmte Datei aus dem Internet saugt,
    und den Status, also bei wie viel % der download liegt,
    anzeigt, weiß jemand wie das geht? D:

    MfG
    CheesButter

    3 Mal editiert, zuletzt von CheesButter (12. Juni 2010 um 16:19)

  • "Normaler" Download:

    Spoiler anzeigen
    [autoit]


    InetGet ( "URL" [,"filename" [, options [, background]]])

    [/autoit]

    Und mit FTP geht es folgendermaßen:

    Spoiler anzeigen
    [autoit]

    While 1

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

    $msg = GUIGetMsg()
    $server = 'ftp.xyz.de'
    $username = 'Username'
    $pass = "PW"

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

    Switch $msg
    Case $update
    $Open = _FTP_Open('Mein FTP-Control')
    $Conn = _FTP_Connect($Open, $server, $username, $pass)
    _FTP_ProgressDownload($Conn, '', "file.txt")
    _FTP_Close($Open)

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

    WEnd

    [/autoit]

    Viele Grüße,
    HopFail

    Einmal editiert, zuletzt von HopFail (12. Juni 2010 um 16:48)

  • ich hab dir hier mal schnell ein Bsp. gemacht ;)

    EDIT: sorry war noch ein Fehler drinn. man muss natürlich den Prozentualen wert der progress setzten

    Spoiler anzeigen
    [autoit]

    opt("GUIOnEventMode",1)
    GUICreate("Downloader",200,200)
    Global $Progress = GUICtrlCreateProgress(10,80,180,20)
    GUICtrlCreateButton("Donwload",70,160,60,20)
    GUICtrlSetOnEvent(-1,"Download")
    GUISetOnEvent(-3,"_exit")
    GUISetState()
    Global $Don_Link = "http://autoit.de/index.php?page=Attachment&attachmentID=10169&h=cf81466099fd49b261097e157ddc43ee418ce64f"

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

    While 1
    Sleep(100)
    WEnd

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

    Func Download()
    $hDon_file = InetGet($Don_Link,@ScriptDir &"/Formel 1 Display v1.1.rar",1,1)
    Do
    $lokal_size = FileGetSize(@ScriptDir & "/Formel 1 Display v1.1.rar")
    GUICtrlSetData($Progress,100/$lokal_size*InetGetInfo($hDon_file,1))
    Sleep(400)
    Until $lokal_size >= InetGetInfo($hDon_file,1)
    MsgBox(0,"Fertig","Fertig")
    Exit
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    2 Mal editiert, zuletzt von Darter (12. Juni 2010 um 16:16)

  • dank dir =)
    funzt super :>


    Hast du dir das heruntergeladene dann auch gleich mal angekuckt? Wenn ja kannst du ja deine Menung bzw. verbesserungsvorschläge o.ä. hier abgeben

    http://www.autoit.de/index.php?page…;threadID=20965

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • jap bei kleinen datein funzt es super
    aber sobald die datei größer wird
    (habs mit ner ca 700 mb großen datei versucht)
    startet der und gleich kommt die MsgBox mit Fertig :/


  • Werbung machen für seine eigenes Programm in anderen Theard wo leute hilfe brauchen.

    Nc

    -----
    In der Hilfe müsste auch ein Beispiel mit InetGet sein :) Dort sieht man auch wie das alles genau geht.

    Hää. Ich hab ihm ein komplettes Bsp. gemacht und a musste man nunmal etwas downloaden und was bietet sich mehr an als eine datei direkt hier utoit Server und da ich mein Programm letztens fertig hatte wieso nicht.

    vllt das überlesen :

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Hää. Ich hab ihm ein komplettes Bsp. gemacht und a musste man nunmal etwas downloaden und was bietet sich mehr an als eine datei direkt hier utoit Server und da ich mein Programm letztens fertig hatte wieso nicht.

    vllt das überlesen :

    Ist mir schon klar , dass es sich anbietet sein Programm da rein zu schreiben.
    Aber dann noch nach zufragen.. Hast du dir das Programm schon angeguckt...

    No Comment.
    ---- Jetzt Back 2 Topic --- sonst wird hier nur Diskutiert.

  • jap bei kleinen datein funzt es super
    aber sobald die datei größer wird
    (habs mit ner ca 700 mb großen datei versucht)
    startet der und gleich kommt die MsgBox mit Fertig :/

    Ich habs nochmal etwas abgeändert, vllt hast hast du nen kleinen Fehler gemacht, der so vermieden wird.
    kannst du mal dein Script posten? ist schwer ohne zu sagen, wo der fehler liegt

    EDIT: noch was aufgefallen. vergessen, das Handle zu schließen :pinch:

    Spoiler anzeigen
    [autoit]

    opt("GUIOnEventMode",1)
    GUICreate("Downloader",200,200)
    Global $Progress = GUICtrlCreateProgress(10,80,180,20)
    GUICtrlCreateButton("Donwload",70,160,60,20)
    GUICtrlSetOnEvent(-1,"Download")
    GUISetOnEvent(-3,"_exit")
    GUISetState()
    Global $Don_Link = "http://autoit.de/index.php?page=Attachment&attachmentID=10169&h=cf81466099fd49b261097e157ddc43ee418ce64f"; Downloadlink
    Global $Saved_filename = "Formel 1 Display v1.1.rar" ; So wird die Datei heißen, die Gedownloadet wurde. Endung nicht vergessen.

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

    While 1
    Sleep(100)
    WEnd

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

    Func Download()
    $hDon_file = InetGet($Don_Link,@ScriptDir &"/" & $Saved_filename,1,1)
    Do
    $lokal_size = FileGetSize(@ScriptDir & "/" & $Saved_filename)
    GUICtrlSetData($Progress,100/$lokal_size*InetGetInfo($hDon_file,1))
    Sleep(400)
    Until $lokal_size >= InetGetInfo($hDon_file,1)
    InetClose($hDon_file)
    MsgBox(0,"Fertig","Fertig")
    Exit
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    Einmal editiert, zuletzt von Darter (12. Juni 2010 um 18:27)

  • Hallo CheesButter,

    versuch mal diese Variante, die MsgBox am Ende gibt mehr Informationen:

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)

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

    $sLocalFile = @DesktopDir & "\JaYT-DwiMP3-P.exe" ;YouTube-Downloader
    GUICreate("Downloader", 200, 200)
    Global $Status = GUICtrlCreateLabel("",10, 50, 180, 20,0x01)
    Global $Progress = GUICtrlCreateProgress(10, 80, 180, 20)
    GUICtrlCreateButton("Donwload", 70, 160, 60, 20)
    GUICtrlSetOnEvent(-1, "Download")
    GUISetOnEvent(-3, "_exit")
    GUISetState()
    Global $Don_Link = "http://www.autoit.de/index.php?page=Attachment&attachmentID=9962&h=67e7e3c22cfb4ce801c2728d5ac852466455cd9f"

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

    While 1
    Sleep(100)
    WEnd

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

    Func Download()
    $iSizeTo = InetGetSize($Don_Link)
    $hDon_file = InetGet($Don_Link, $sLocalFile, 1, 1)
    if $iSizeTo = 0 Then $iSizeTo = InetGetInfo($hDon_file, 1)
    $iSizeTo = Round($iSizeTo / 1024,0)
    Do
    $iSizeDone = Round(InetGetInfo($hDon_file, 0) / 1024,0)
    $iProz = Round($iSizeDone / $iSizeTo * 100,0)
    GUICtrlSetData($Progress, $iProz)
    GUICtrlSetData($Status,$iSizeDone & "/" & $iSizeTo & " KB = " & $iProz & "%")
    Sleep(1000)
    Until InetGetInfo($hDon_file, 2)
    Local $aData = InetGetInfo($hDon_file) ; Hole alle Informationen.
    InetClose($hDon_file) ; Handle schließen um die Resourcen freizugeben.
    MsgBox(0, "", "Bytes gelesen: " & $aData[0] & @CRLF & _
    "Größe: " & $aData[1] & @CRLF & _
    "Komplett?: " & $aData[2] & @CRLF & _
    "Erfolgreich?: " & $aData[3] & @CRLF & _
    "@error: " & $aData[4] & @CRLF & _
    "@extended: " & $aData[5] & @CRLF)
    Exit
    EndFunc ;==>Download

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

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    die Prozentereechnung habe ich geändert (stimmt jetzt) und das DownLoad-File habe ich auch ausgetauscht,

    mfg (Auto)Bert

  • habe grad festegstell, dass noch fehler drinn waren, bei der prozenberechnung ich dummele ^^.
    Hab außerdem ne ander Downloadfile als Bsp. genommen.

    EDIT: Ach Autobert ja ne Ulimate Version geposten^^

    Spoiler anzeigen
    [autoit]

    opt("GUIOnEventMode",1)
    GUICreate("Downloader",200,200)
    Global $Progress = GUICtrlCreateProgress(10,80,180,20)
    GUICtrlCreateButton("Donwload",70,160,60,20)
    GUICtrlSetOnEvent(-1,"Download")
    $Lab = GUICtrlCreateLabel("Downloader",0,20,200,60,0x01)
    GUICtrlSetFont($Lab, 10, 400, 0, "MS Sans Serif", 4)
    GUISetOnEvent(-3,"_exit")
    GUISetState()
    Global $Don_Link = "http://www.the-franky.de/Desktop%20Wetter.rar"
    Global $Save_filename = "Desktop Wetter.rar"
    While 1
    Sleep(100)
    WEnd

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

    Func Download()
    Local $Don_size = InetGetSize($Don_Link)
    Local $hDon_file = InetGet($Don_Link,@ScriptDir & "/" & $Save_filename ,1,1)
    Do
    $lokal_size = FileGetSize(@ScriptDir & "/" & $Save_filename)
    GUICtrlSetData($Progress,100/$Don_size*InetGetInfo($hDon_file,1))
    Sleep(400); Bei Größeren Daten Natürlich verkleinern ^^
    Until $lokal_size >= $Don_size
    InetClose($hDon_file)
    MsgBox(0,"Fertig","Fertig")
    Exit
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Darter,

    deine Prozentberechnung ist immer noch falsch:

    [autoit]

    GUICtrlSetData($Progress,100/$Don_size*InetGetInfo($hDon_file,1))

    [/autoit]

    = 100 / bereits Heruntergeladen * Herunterzuladen. Angenommen das File hat 1000 Bytes, 50 davon sind bereits heruntergeladen dann kommt nach deiner Formel 100 / 50 * 1000 2000% heraus.

    mfg (Auto)Bert

  • Darter,

    deine Prozentberechnung ist immer noch falsch:

    [autoit]

    GUICtrlSetData($Progress,100/$Don_size*InetGetInfo($hDon_file,1))

    [/autoit]

    = 100 / bereits Heruntergeladen * Herunterzuladen. Angenommen das File hat 1000 Bytes, 50 davon sind bereits heruntergeladen dann kommt nach deiner Formel 100 / 50 * 1000 2000% heraus.

    mfg (Auto)Bert


    Nein
    hier

    [autoit]

    GUICtrlSetData($Progress,100/$Don_size*InetGetInfo($hDon_file,1))

    [/autoit]


    rechne ich 100 / Herunterzulanden * bereits Heruntergeladen ;)

    oder meinst du, weil keine klammern gesetzt sind.
    Nach meinem Verständniss her rechnet er zuerst 100/ Herunterzulanden und das dann mal breits heruntergeladen. Also ist das doch ein Normaler Dreisatz und müsste so auch stimmer oder vertuhe ich mich jetzt kommplett?

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

    Einmal editiert, zuletzt von Darter (12. Juni 2010 um 20:18)

  • Nein
    hier

    [autoit]

    GUICtrlSetData($Progress,100/$Don_size*InetGetInfo($hDon_file,1))

    [/autoit]


    rechne ich 100 / Herunterzulanden * bereits Heruntergeladen ;)

    wenn $Don_size die Gesamtgröße des Downloads ist [Edit: stimmt da $Don_size = InetGetSize($Don_Link)], rechnest du da

    [autoit]

    InetGetInfo($hDon_file,1)

    [/autoit]

    ja ebenfalls die Gesamtgröße des Downloads zurückgibt 100/herunterzuladen*herunterzuladen ergibt also immer 100%

    mfg (Auto)Bert

  • ok stimmt natürlich sollte das ganze dann GUICtrlSetData($Progress,100/$Don_size*InetGetInfo($hDon_file,0)) statt GUICtrlSetData($Progress,100/$Don_size*InetGetInfo($hDon_file,1))
    heißen ;)

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Was haltet ihr davon (bei mir lädt die ProgressBar nicht, vielleicht ist die Datei zu groß und es dauert zu lange)?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Global $download
    Global $progress
    Global $size

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

    GUICreate("Download",500,100)
    GUISetState(@SW_SHOW)
    $startbutton=GUICtrlCreateButton("Start",20,20,450,30)
    $progressbar=GUICtrlCreateProgress(20,60,450,30)
    $percentage=$progress*100/$size

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $startbutton
    $download=InetGet("http://www.29soft.com/pc_game_download/download.asp?fid=914","busdriver_setup-dm.exe")
    $progress=InetGetInfo($download,0)
    $size=InetGetInfo($download,1)
    GUICtrlSetData($progressbar,$percentage)
    EndSwitch
    WEnd

    [/autoit]

    Viele Grüße,
    HopFail