File Download



  • Hallo...

    Ich wollte einen einfachen filedownlaoder schreiben,allerdings funktioniert der nicht so wie er soll was ist falsch??

    #include <iostream>
    #include <windows.h>
    #include <urlmon.h>
    
    // Datei herunterladen
    HRESULT result = URLDownloadToFile(
        NULL,
        L"http://example.com/Update.exe", // URL zur Datei
        L"Update.exe", // Lokaler Name der Datei
        0,
        NULL);
    if (result == S_OK) {
      system("explorer /*Pfad*/ C:\\\Dokumente und Einstallungen\\\...");
    } else {
      cout << "Fehler beim Download" << endl
    }
    


  • Du checkst es noch immer nicht.

    WinAPI ist nicht C++!



  • In gewisser weise schon^^ naja egal man muss es wie so vieles lernen



  • Also deine Fehlerbeschreibung ist erst mal für die Tonne. Es gehört schon mehr zu C++ als nur <iostream> ein zu binden. main() wäre schon mal ein Anfang.



  • C++ler schrieb:

    Hallo...

    Ich wollte einen einfachen filedownlaoder schreiben,allerdings funktioniert der nicht so wie er soll was ist falsch??

    #include <iostream>
    #include <windows.h>
    #include <urlmon.h>
    
    int main()
    {
    // Datei herunterladen
    HRESULT result = URLDownloadToFile(
        NULL,
        L"http://example.com/Update.exe", // URL zur Datei
        L"Update.exe", // Lokaler Name der Datei
        0,
        NULL);
    if (result == S_OK) {
      system("explorer /*Pfad*/ C:\\\Dokumente und Einstallungen\\\...");
    } else {
      cout << "Fehler beim Download" << endl
    }
    }
    


  • Schon der Satz ",allerdings funktioniert der nicht so wie er soll was ist falsch?? " ist extrem dreist. Den selben Quatsch noch mal zu zitieren erst recht!

    Willst du nicht mal endlich sagen, "was nicht geht"?



  • ich würde mal sagen es liegt an dieser Zeile:

    C++ler schrieb:

    system("explorer /*Pfad*/ C:\\\Dokumente und Einstallungen\\\...");
    

    und zwar genauer an /*Pfad*/ weil das hier nicht als Kommentar erkannt wird.

    Außerdem enthält die zeile noch einen weiteren Schreibfehler:

    C++ler schrieb:

    Dokumente und Einstallungen

    Du meinst wohl Dokumente und Einstellungen

    edit: gleich noch etwas: warum nimmst du 3 backslashes??

    C++ler schrieb:

    \\

    2 müssten doch reichen: *\*

    verbessert würde die Zeile dann so aussehen:

    system("explorer C:\\Dokumente und Einstellungen\\...");
    

    (wobei natürlich das ... noch durch den Rest des Pfades ersetzt werden muss.)

    edit: und noch etwas: statt

    C++ler schrieb:

    "Update.exe"
    

    musst du soweit ich mich erinnere doch den vollständigen Pfad angeben:

    also mindestens

    "C:\\Update.exe"
    

    verbessert sieht dein Code dann so aus:

    #include <iostream> 
    #include <windows.h> 
    #include <urlmon.h> 
    
    int main() 
    { 
    // Datei herunterladen 
    HRESULT result = URLDownloadToFile( 
        NULL, 
        L"http://example.com/Update.exe", // URL zur Datei 
        L"C:\\Dokumente und Einstellungen\\Update.exe", // Lokaler Name der Datei 
        0, 
        NULL); 
    if (result == S_OK) 
    { 
      system("explorer  C:\\Dokumente und Einstellungen\\..."); 
    } 
    else 
    { 
      cout << "Fehler beim Download" << endl 
    } 
    
    }
    

    (Dabei musst du natürlich "C:\\Dokumente und Einstellungen\\Update.exe" noch durch den Pfad ersetzt werden, unter dem die Datei gespeichert werden soll.)

    ach ja, welchen Compiler benutzt du eigentlich? eventuell musst du noch die urlmon.lib linken;

    bei MS Visual C++ 2008 Express Ediion einfach noch

    #pragma comment(lib, "urlmon.lib")
    

    in den globalen Scope einfügen.

    ansonsten einfach in den Optionen des Compilers.

    abgesehen davon ist natürlich eine genauere Fehlerbeschreibung als "funktioniert nicht" nötig.

    mfg,
    andi01.



  • @andi:

    Es müssen 2 sein. Mit '\' öffnet man eine Esquapesequenz. -> '\' ist '\' als Output.



  • stimmt du hast recht 😉 aber auf keinen Fall 3!

    ich bessere das oben gleich mal aus...

    edit: so, jetzt müsste der verbesserte Code oben aber stimmen 😃

    @C++ler: funktioniert es jetzt mit dem verbesserten Code? Ansonsten bitte eine genauere Fehlerbeschreibung.

    mfg,
    andi01.



  • andi01 schrieb:

    edit: gleich noch etwas: warum nimmst du 3 backslashes??

    Warum überhaupt Backslashes? Ein Slash reicht und funktioniert ebenso.

    Dennoch sollte dieser Thread vielleicht in den WinAPI-Bereich verschoben werden.



  • Nexus schrieb:

    Ein Slash reicht und funktioniert ebenso.

    also ich habe es jetzt mal bei mir getestet (unter Win XP, MS Visual C++ 2008 EE), bei mir funktioniert es nur mit doppeltem Backslash.

    so geht es bei mir:

    system("explorer C:\\Dokumente und Einstellungen\\test");
    

    bei allen anderen Varianten (auch mit einfachen Slash) kommt

    Der Pfad ist nicht vorhanden oder vwerweist auf kein Verzeichnis.

    damit müsste sein Code so aussehen und hoffentlich funktionieren:

    #include <iostream> 
    #include <windows.h> 
    #include <urlmon.h> 
    
    int main() 
    { 
    // Datei herunterladen 
    HRESULT result = URLDownloadToFile( 
        NULL, 
        L"http://example.com/Update.exe", // URL zur Datei 
        L"C:\\Dokumente und Einstellungen\\Update.exe", // Lokaler Name der Datei 
        0, 
        NULL); 
    if (result == S_OK) 
    { 
      system("explorer  C:\\Dokumente und Einstellungen\\..."); 
    } 
    else 
    { 
      cout << "Fehler beim Download" << endl 
    } 
    
    }
    

    mfg,
    andi01.



  • Du hast Recht. Ich habe es mit #include -Pfaden verwechselt, wo einfacher Slash / reicht.



  • Hab es jetzt auch herausgefunden:

    #include <iostream>
    #include <windows.h>
    #include <urlmon.h>
    using namespace std;
    
    #pragma comment(lib,"URLMon.lib")
    
    void db()
    {
    	// Datei herunterladen
    HRESULT result = URLDownloadToFile(
        NULL,
        TEXT("URL ZUM FILE"), // URL zur Datei
    	TEXT("LOKALER PFAD"), // Lokaler Name der Datei
        0,
        NULL);
    if (result == S_OK)
    {
      cout << "TEST erfolgreich heruntergeladen" << endl;
      system("PAUSE");
      cout << endl;
    }
    else
    {
      cout << "Fehler beim Download" << endl;
      system("PAUSE");
    }
    }
    
    void dat()
    {
    // Datei herunterladen
    HRESULT result2 = URLDownloadToFile(
        NULL,
        TEXT("URL ZUM FILE"), // URL zur Datei
    	TEXT("LOKALER PFAD"), // Lokaler Name der Datei
        0,
        NULL);
    if (result2 == S_OK)
    {
      cout << "TEST erfolgreich heruntergeladen" << endl;
      system("PAUSE");
      cout << endl;
    }
    else
    {
      cout << "Fehler beim Download" << endl;
      system("PAUSE");
    }
    }
    
    void remove()
    {
    	remove("PFAD");
    	remove("PFAD");
    	cout << "Dateien geloescht" << endl;
    	system("PAUSE");
    }
    
    int main()
    {
    db();
    dat();
    //remove();
    }
    


  • Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wie kann man ein .zip File nunn noch entpacken?

    am besten mit "void unzip()"

    hätte mir da jemmand nen code



  • Mit einer lib die das kann. Google ist ein Freund, auch deiner.



  • Also ich habs jetzt geschafft,dass die Dateien gedownloaded und entpackt werden soweit ich es möchte...

    Nun soll er die Datei die zum download führt (Down.exe) nach dem ausführen gelöscht werden und die Dateien die heruntergeladen werden in folgendes verzeichnis gemoved werden: "C:\Programme\DeckButler"..

    wie muss man das machen??

    void move()
    {
    }
    
    void removedown()
    {
    }
    


  • Da brauchst glaub ich ne weitere .exe, die dann die andere löscht. Willst du wirklich den "Updater" löschen?

    http://msdn.microsoft.com/en-us/library/aa365239
    http://msdn.microsoft.com/en-us/library/aa363915



  • Ich muss das einfach mal sagen, aber alle deine Fragen kann man nach 5 Sekunden googlen beantworten.

    Schau dir einfach die Funktionen auf MSDN zur Dateiverarbeitung an und dann weißt du wie du sie löscht, verschiebst, umbenennst, etc.



  • Ich wünsch dir viel Spaß mit der Funktion URLDownloadToFile 😋
    Bei "aktuelleren" Virenscannern kann es nämlich passieren, dass dieser Funktionsaufruf geblockt wird, weil es für "bösen Code" gehalten wird ..
    hatte das Problem erst selbst vor kurzem aber dagegen hilft auch Google :p


Anmelden zum Antworten