DynamicArray of char :: Mit read füllen.



  • Hallo,

    wenn ich wie folgt eine Datei binär öffne und einige Zeichen lese, dann funktioniert alles.
    Im Folgenden Beispiel habe ich in "buf" 10 Zeichen:

    handle=open(File,O_RDONLY | O_BINARY);
    char buf[10];
    read(handle,&buf,10);
    

    Da ich aber nicht weiß, wieviele Zeichen ich jedes Mal lesen muss, versuche ich es mit DynamicArray:

    DynamicArray<char>buffer;
    buffer.Length = length;
    read(handle,&buffer,length);
    

    In "buffer" wird allerdings nichts geschrieben.
    Wie kann ich sonst mit "read" mein DynamicArray "buffer" füllen?

    P.S. Ich kann hier kein AnsiString nehmen, da unter den gelesenen Zeichen das Zeichen '\0' sein kann, das das Ende eines Strings markiert.

    Danke für jeden Tipp



  • Hallo

    Das wird so nichts. Was für einen Wert hat denn die Variable length?
    Vermutlich ist es eh nicht gültig DynamicArray in ein C-Array zu casten.
    Besser ist es mit new selber Speicher für ein normales C-Array zu besorgen

    handle=open(File,O_RDONLY | O_BINARY);
    char *buf = new char[length];
    read(handle,buf,length);
    // mit bug arbeiten
    delete[] buf; // Wenn buf nicht mehr gebraucht wird oder bevor ihm ein neuer Speicherbreich zugewiesen wird
    

    Eventuell solltest du auch auf std::fstream umsteigen. Bringt zwar bei Binärlesen nicht mehr Konfort ist aber dafür eine gute Gelegenheit die C++ STL kennenzulernen.

    bis bald
    akari



  • Danke @akari für die Antwort.

    akari schrieb:

    Was für einen Wert hat denn die Variable length?

    Die Länge ist variabel und kann bis zu 20000000 sein (oder vielleicht auch noch länger)

    char *buf = new char[length];
    

    Damit hatte ich es schon versucht. Hier enthält "buf" die Zeichen bis zum nächsten '\0'. Dann ist die "Zeichenkette" für ih zu Ende. Die danach folgenden Zeichen sind dann weg.

    Danke für die Mühe



  • Hallo

    Damit hatte ich es schon versucht. Hier enthält "buf" die Zeichen bis zum nächsten '\0'. Dann ist die "Zeichenkette" für ih zu Ende. Die danach folgenden Zeichen sind dann weg.

    Falsch. Es werden solange Zeichen gelesen wie in der Datei vorhanden, nur begrenzt durch den Wert length.
    Wahrscheinlich hast du dir den Inhalt des C-Arrays mit einer der typischen C-String Methoden ausgeben lassen. Aber das wird natürlich nichts denn diese Funktion sind für C-Strings, nicht für C-Arrays. Und C-Strings sind Arrays deren ende durch ein '\0' gekennteichnet sind, darum heißen sie auch Null-terminiert.

    Wenn du also benäre Daten anzeigen lassen willst must du schon manuell jedes Zeichen einzeln ausgeben, dann kannst du auch selber das Ende bestimmen.

    bis bald
    akari



  • Aha!
    Ich werde es gleich machen.
    Danke!



  • Du hast recht. Das war's.
    Wenn ich die Zeichen in einer Datei binär schreibe, dann sind sie auch alle da.

    Vielen Dank nochmals!


Anmelden zum Antworten