HTTP Header vom File trennen



  • Hi,

    leider werden meine Dateien immer unbrauchbar ( Anwendung ist keine win32 Anwendung oder Anwendung verweist auf Speicher 0x00000000 😞
    Wenn ich die Dateien per Editor vergleiche sehen sie aber gleich aus.

    Ich schreibe die Daten die mir der HTTP server sendet erstmal in ein TMP file danach filtere ich den Header raus und speichere den Rest als empfangene Datei.

    // Antwort des Servers empfangen und auswerten
    
    	// erstmal alles in ein File schreiben
    	G_Out = fopen("OUT.DAT","w");
        while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) {
    		fwrite(buf, 1, bytes_recv, G_Out);
    	}
        if (bytes_recv == -1) {
            fclose(G_Out);
            printf( "recv()");
            remove("OUT.DAT");
            return;
        }
        fclose(G_Out);
    
        FILE * G_in;
        long lSize;
        char * G_buffer;
        G_in = fopen ( "OUT.DAT" , "rb" );
        G_Out = fopen( "FILE.DAT", "wb" );
        if (G_in == NULL){
    		printf("Fehler: Keine Daten empfangen");
    		return;
    	}
    
        // Filegroesse ermitteln
        fseek (G_in , 0 , SEEK_END);
        lSize = ftell (G_in);
        rewind (G_in);
    
        // Speicher reservieren
        G_buffer = (char*) malloc (lSize);
        if (G_buffer == NULL) exit (2);
    
        // File in den Buffer laden
        fread (G_buffer,1,lSize,G_in);
    
        // Head und File trennen
        G_zaehl = 0;
        G_headend = 0;
        while(G_zaehl<lSize){
        	if(!G_headend){
         		switch (G_buffer[G_zaehl]){
            		case 13:
                		if(G_hit == 0) G_hit++;
                    	if(G_hit == 2) G_hit++;
                    	break;
               		case 10:
                    	if(G_hit == 1) G_hit++;
                    	if(G_hit == 3) G_hit++;
                    	break;
                	default:
                    	if(G_hit != 4) G_hit = 0;
                }
                if(G_hit == 4){
                	G_headend = 1;        //Kopfende gefunden ( durch zweimaliges Return erkennbar )
                }
            }
            else{    //File wird geschrieben
    			char *G_File;
    			G_File = (char*)calloc(lSize-G_zaehl,sizeof(char));
                memcpy(G_File,G_buffer+G_zaehl,lSize-G_zaehl);
                fwrite(G_File, 1, lSize-G_zaehl, G_Out);
                break;
            }
            G_zaehl++;
    	}
    
        fclose (G_in);
        fclose (G_Out);
        free (G_buffer);
    

    thanx in advance 🙂



  • fopen("OUT.DAT","wb");



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

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

    Dieses Posting wurde automatisch erzeugt.



  • Danke das hatte ich übersehen 🙂


Anmelden zum Antworten