FTP-Download mit WinInet



  • Hallo,

    Ich habs jetzt endlich anhand der MSDN-Dokumentation geschafft ein Programm zu schreiben, dass per WinInet eine Datei von einem FTP-Server herunterlädt.

    Dazu verwende ich folgende Funktionen in dieser Reihenfolge:
    --> InternetOpen
    --> InternetConnect
    --> FtpSetCurrentDirectory
    --> FtpGetFile

    Jetzt möchte ich noch gerne während des Downloads der Datei über den Status bescheid wissen (z.B. Download-Fortschritt in Prozent).

    Was muss ich dazu tun?

    mit freundlichen Grüßen,
    Daniel Lang



  • InternetSetStatusCallback aufrufen und dann in der Callback INTERNET_STATUS_RESPONSE_RECEIVED mit dem Status FTP_DOWNLOADING



  • Vielen Dank!

    Ich finde leider keine näheren Informationen zu FTP_DOWNLOADING in der MSDN...

    Ich versteh außerdem auch die ganze Funktionsweise von diesen Callbacks nicht.

    Der Header meiner Callback sieht so aus:

    void CALLBACK StatCallback (HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus,
    							LPVOID lpvStatusInformation, DWORD dwStatusInformationLength)
    

    Mittels eines Switch prüfe ich dann den Parameter dwInternetStatus auf auf "INTERNET_STATUS_RESPONSE_RECEIVED" aber was mach ich dann????

    Ideal wäre es wenn mir bitte jemand seinen Code als Beispiel geben könnte...

    mit freundlichen Grüßen,
    Daniel Lang



  • Das mit dem FTP_DOWNLOADING gibt es nicht in der Wininet... war von einem Beispiel raus:
    http://vbnet.mvps.org/index.html?code/internet/ftpdownloadcallback.htm
    Ist zwar in VB, aber macht genau, dass was Du willst...



  • Dankeschön, leider versteh ich absolut nix von VB... vor allem das ganze mit den Zeigern und Types macht mir in diesem Beispiel schwer zu schaffen.

    Vielleicht könnte mir jemand anhand von C++ Code weiterhelfen?



  • Falls es jemanden interessieren sollte oder jemand die Suchfunktion benützt, ich habs jetzt folgendermaßen geschafft:

    Es wird global eine Variable definiert, die den aktuellen Status angibt (idealerweise ein Enum), und diese wird VOR dem FtpGetFile mit einem Wert belegt der den Status für Downloaden representiert.
    In der InternetStatusCallback verarbeitet man dann den Parameter "dwInternetStatus" mit einem Switch und prüft diesen auf den Wert "INTERNET_STATUS_RESPONSE_RECEIVED". Dabei prüft man dann noch ob der aktuelle Status "Downloading" heißt und falls ja, zeigt der Parameter "lpvStatusInformation" auf ein DWORD das die Anzahl der gerade heruntergeladenen Bytes angibt.

    Jetzt hat man die Anzahl der Bytes, die seit dem letzten Callback-Aufruf heruntergeladen wurden. Diese kann man nun mit einer globalen Variable zusammenzählen und in der GUI angeben.

    Vielen Dank für die Unterstützung!

    mit freundlichen Grüßen,
    Daniel Lang


Anmelden zum Antworten