Datei auslesen mit string
-
Hallo,
ich habe es (hier?) schon mal gesehen, finde es jedoch nicht wieder!
Wie kann ich einen Datei mit Hilfe einer string-Variable auslesen (Kasse <string>)?
So geht es leider nicht:file.read(reinterpret_cast<char*>(inhalt),1000);Ich bekomme die Fehlermeldung, daß der Compiler string in char* nicht casten kann.
Das hier liefert keine Fehler, wird aber nicht mit Daten gefüllt:
file.read((char*)inhalt.c_str(),1000);Was mache ich falsch? Welche ist die Lösung?
Schin im voraus vielen Dank.
Emmanuel
-
getlineSollte das richtige sein...
-
Danke,
getlineist mir bekannt! Ich will die Datei binär öffnen und auf einen Schag auslesen! In meinem Beispiel gehe ich davonaus, daß 1000 Bytes ausreichen (inm richtigen Code wird natürlich die Größe ermittelt und ein char-Array mit
newrichtig dimensioniert). Die Frage ist, ob sich das Gleiche mit einer string machen lässt!
Emmanuel
-
Hallo
Du solltest auf den Compiler bei dem C++ Cast hören. Ein std::string ist kein char*, und auch wenn du einen "brutalen" C-Cast nimmst, wird aus einen const char* (dem Rückgabeergebnis von std::string::c_str()) kein char*. Denn das const hat schon seinen guten Grund, das Rückgabeergebnis darf nicht verändert werden.
std::string ist nunmal nicht dafür gedacht, in dieser Art mit binären Daten gefüllt zu werden, sondern sich selber per getline die Daten zu holen.
Wenn du wirklich binäre Daten haben willst, must du auch manuell mit dynamischer Speichereservierung und C-Strings arbeiten.bis bald
akari
-
Ich würde für Binärdaten std::vector<char> nehmen.
std::vector<char> buf(1024); fin.read(&buf[0], buf.size());mfg.
-
joomoo schrieb:
Ich würde für Binärdaten std::vector<char> nehmen.
std::vector<char> buf(1024); fin.read(&buf[0], buf.size());mfg.
ne, boost::array höchstens. wenn man die größe schon zur compile zeit kennt ist std::vector doch verschwendung.
-
Danke an alle!
Ich werde wohl für diesen Zweck C-strings weiterhin benutzen. Ich dachte nur, vielleicht gibt es für diesen Zweck eine elegante c++ Lösung!
Ciao,
Emmanuel
-
ffff hat sie doch soeben vorgestellt...

-
DU BRAUCHST KEINE C STRINGS SONDERN NUR BYTE PUFFER. DU KANNST DANN IMMER EIN STÜCKCHEN MIT READ LESEN; ZB 4096 BYTE UND DIE DANN AN DEN STRING MIT APPEND DRAN MACHEN WENN DU DIE GANZE DATEI IN EINEN STRING HABEN WILLST.
-
std::size_t fileSize = getFileSize(...); std::vector<char> buffer(fileSize); inputFileStream.read(&buffer[0], buffer.size()); std::string s(buffer.begin(), buffer.end());