TFileStream - int einlesen/ausgeben



  • Hallo,

    ich habe das früher mal mit fstream gemacht, aber ich habe jetzt keine Ahnung mehr, wie ich das hinbekommen habe?
    Wie kann ich denn einen int wert in char * umwandeln?
    mit

    int i = 1000;
    f_stream->Write((char*)i, sizeof(int));
    

    geht'S ja nich...

    Gruß



  • Hallo

    - das hat nichts mit dem Builder zu tun, sondern gehört in das C++ Forum (ich gehe davon aus das du std::fstream meinst, und nicht TFileStream)

    - wenn du die Zahl als Text speichern willst, must du diese nur in den Stream schieben

    f_stream << i;
    

    - wenn du die Zahl binär speichern willst, must du richtig casten

    f_stream.write(reinterpret_cast<const char*>(i), sizeof(int));
    

    bis bald
    akari



  • So nicht, aber vielleicht so

    f_stream->Write((const char*)&i, sizeof(i));
    

    oder C++mäßiger

    f_stream->Write(reinterpret_cast<const char*>(&i), sizeof(i));
    


  • @akari: doch, ich habe TFileStream gemeint.

    @Braunstein: Genau, danke, da war doch noch was... das kleine &....
    gibt es eigentlich einen unterschied zwischen

    (const char*)&i
    

    und

    reinterpret_cast<const char*>(&i)
    

    ???

    gruß



  • Hallo

    doch, ich habe TFileStream gemeint.

    Du siehst es ist wichtig mit korrekten Begriffen zu posten.

    Der Unterschied ist : das erste ist die veraltete C-Variante, das zweite die bessere und typsichere C++ Variante. Wobei der reinterpret_cast noch der härteste Cast ist, und nur wie hier wenn zwingend nötig eingesetzt werden sollte. static_cast und dynamic_cast wären in anderen Situationen angebracht.

    bis bald
    akari



  • acho...

    Noch eine Frage: Ist es eigentlich möglich einen TFileStream komplett zu leeren und dann hineinschreiben? Wenn ja, wie?

    Also man öffnet die Datei, liest heraus und schreibt veränderte Werte hinein. Die neuen Werte sind jedoch länger als die anderen, also kann man nich einfach überschreiben sondern muss das ja irgendwie einfügen. Oder die komplette Datei neu schreiben.

    Ich habe keine Funktion zum einfügen gesehen, gibt es so etwas nicht, oder habe ich das übersehen?

    Gruß



  • Hallo

    Das Prinzip von Streams ist ja gerade, das anfügen die beste Manipulation ist. Deshalb ist das Prinzip mit dem neuen leeren Zweitstream und Datei überschreiben die einfachste Art, Daten beliebig zu ändern.

    bis bald
    akari



  • Was genau willst du nun machen.
    Als Hinweis, in die Eigenschaft Size kann man auch schreiben.
    Wenn du in der Datei etwas ändern willst mußt du sie schon komplett neu schreiben.



  • Danke, der Hinweis hat mir geholfen. Wenn ich size auf 0 setze und dann schreibe ist nur das in der Datei, was ich greade geschreiben habe.

    Wenn ich eine Datei ändere, muss ich nicht zwangsweise die Datei komplett neu schreiben. Wenn ich weiß, an welcher Position ein bestimmter Wert steht, kann ich auch einfach mit seek an die stelle gehen und den Wert überschreiben.

    Gruß


Anmelden zum Antworten