Der Inhalt eines Streams in einer Variable speichern



  • Guten Abend zusammen.

    Der Inhalt des index.txt wird schön in die Datei test.txt geschrieben.
    Gleichzeitig möchte ich diesen Inhalt in einer Variable (buffer) speichern für eine spätere weitere Verwendung.
    Irgendwas scheint nicht zu funktionieren, denn die MessageBox zeigt mir nur komische Zeichen an.

    Grüsse und herzlichen Dank,
    Sotares

    HINTERNET Initialize,Connection,File;
    			DWORD dwBytes;
    			char ch;
    			FILE*     fFile; 
    			char buffer;
    
    			/*initialize the wininet library*/
    			Initialize = InternetOpen("HTTPGET",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
    
    			/*connect to the server*/
    			Connection = InternetConnect(Initialize,"localhost",INTERNET_DEFAULT_HTTP_PORT,
    			NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
    
    			/*open up an HTTP request*/
    			File = HttpOpenRequest(Connection,NULL,"/notewriter/index.txt",NULL,NULL,NULL,0,0);
    
    			if(HttpSendRequest(File,NULL,0,NULL,0))
    			{
    				fFile = fopen("c:\\test.txt", "w+b");
    				while(InternetReadFile(File,&ch,1,&dwBytes))
    				{
    				if(dwBytes != 1)break;
    				putchar(ch);
    				buffer += ch;
    				fwrite(&ch, 1, dwBytes, fFile); 
    				}
    				fclose(fFile);
    			}
    
    			/*close file , terminate server connection and
    			deinitialize the wininet library*/
    			InternetCloseHandle(File);
    			InternetCloseHandle(Connection);
    			InternetCloseHandle(Initialize);
    
    			MessageBox(NULL, &buffer, "",0);
    


  • Hmm, besteht dein Buffer nur aus einem char ?



  • geeky schrieb:

    Hmm, besteht dein Buffer nur aus einem char ?

    Nein, dies war ein Fehler.

    Ich habe nun die Lösung gefunden.

    Sotares

    static char buffer[]={0};
    int iLenght=0;
    
    ...
    ...
    
    while(InternetReadFile(File,&ch,1,&dwBytes))
                    {
                    if(dwBytes != 1)break;
                    putchar(ch);
                    buffer[iLenght++] = ch;
    				fwrite(&ch, 1, dwBytes, fFile);
                    }
                    fclose(fFile);
    
    ...
    ...
    


  • InternetReadFile mit einer Puffergröße von 1 ist ganz schön ineffizient.



  • Besser: so ziemlich jede "read" oder "write" Funktion mit einer Puffergrösse von einem Byte ist ziemlich ineffizient.


Anmelden zum Antworten