[C++] Binäre Datei downloaden

  • Hi,
    ich habe folgendes Problem ich möchte eine binäre datei über http-get request downloaden... und anschließend in einer datei speichern. in der datei speichert er aber nur müll und auch viel zu wenig... ich denke mal es liegt daran das ich die daten die ich von server bekomme in einen string speichern lasse...
    ich komme aber leider als anfänger auch auf keine andere möglichkeit

    kann mir bitte einer weiter helfen?
    bin schon am verzweifeln :(

    thx

  • Also ich würde ein (unsigned) char Array dafür nehmen, auch wenn der std::string afaik binary safe ist. Der Fehler kommt vermutlich daher, dass du die Datei nicht mit ios_base::binary öffnest. Aber da du keinen Code postest, ist das schwer zu sagen...

  • danke erstmal für die antwort

    die teile für die rückgabe des sockets:

    in mail.cpp

    Code
    string s;
    ofstream ffile("x.exe");
    while (true){
           socket >> s;
           ffile << s;
    }
    ffile.close();

    in socket.cpp

    in clientsock.cpp

    Code
    const ClientSock& ClientSock::operator >> ( string& s ) const {
       if ( ! Socket::recv ( s ) ) {
          throw SockExcept(
             "ClientSock: Fehler bei Socket::recv()");
       }
       return *this;
    }

    der rest scheint zu gehen (mit snifer pakete mitgeschnitten... ist alles so wie es auch sein muss)

  • Also zuerst solltest du dein ffile mit dem Mode binary und out öffnen:

    Code
    ofstream ffile("x.exe", ios_base::out | ios_base::binary) ;


    Wenn es dann immernoch nicht klappt, würde ich ins blaue behaupten das es am operator<< von ofstream liegt. Der liest nämlich formatierte Daten ein. Das heißt ein Integer wird als Text in die Datei geschrieben. Weiß jetzt allerdings nicht genau wie er das bei std::strings macht.

    Um sicher zu gehen würde ich das mit write machen.