Binäre Datei empfangen und zwischenspeichern in Array



  • Hallo,
    habe ein weiteres Problem:

    Ich empfange eine binäre Datei zeichenweise in mehreren Blöcken über die RS232. Die Daeigröße kann unterschiedlich sein. Z.Zt speichere ich die empfangene Datei blockweise (256 Zeichen) in ein Array. Nach jedem Block schreibe ich den Inhalt des Arrays in eine neue Datei. Und genau dass möchte ich nicht mehr. Ich möchtes die gesamte Datei erst empfangen und dann in die Datei schreiben. Wie kann ich dies am einfachsten unter C realisieren?



  • Eine Möglichkeit:
    Du beginnst mit einer gewissen Buffergröße, zB 512 Byte, die du mit calloc() reservierst und wenn du an diese Grenze kommst vergrösserst du den Buffer mit realloc(). Simpel und straightforward.



  • Na, wenn das so einfach ist, kannst du mir doch bestimmt ein Code-Beispiel präsentieren. Würde mich sehr freuen!

    Gruß, Onkel Sam



  • Anderer Vorschlag: Such mal im Netz nach dem Y-Modem-Protokoll. Das dürfte genau da sein was du suchst. Eine standartisiertes Protokoll zur Übertragung von Dateien über eine serielle Schnittstelle. Hab schon selber damit gearbeitet in Verbindung mit der RS232 und es funktioniert wunderbar. Wie gesagt, such einfach mal nach einer Dokumentation des Y-Modem-Protokolls.



  • Danke für deinen Tipp. Nur leider bin ich da gebunden und kann nicht anders.

    Gruß, Onkel_Sam



  • Auch gut, aber du könntest dir von dem Protokoll vielleicht doch eine kleine Inspiration holen 😉



  • AJ schrieb:

    Auch gut, aber du könntest dir von dem Protokoll vielleicht doch eine kleine Inspiration holen 😉

    OK, ich werde es mir mal anschauen. Danke.



  • Ein Beispiel? Na gut.

    void GetStream()
    {
        int buffer = 512, aux = 0;
        char *pBuffer = (char*) calloc(buffer, sizeof(char));
        while(pBuffer[aux] != EOF)
        {
            if(aux == buffer)
            {
                pBuffer = realloc(pBuffer,buffer * 2 * sizeof(char));
                buffer *= 2;
            }
            aux++;
            pBuffer[aux] = ReadTheCharFromStream();
        }
        DoSomethingWithBuffer(pBuffer,aux);
    }
    

    Das wäre nur eine Möglichkeit, bei der der Speicherplatz immer verdoppelt wird.
    Ich hoffe das hilft dir.
    MFG ChockoCookie


Anmelden zum Antworten