Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

31

05.04.2009, 20:29

Strukturen direkt zu serialisieren ist immer so eine Sache. serialisier lieber die einzelnen Attribute. Damit bist du auf der sicheren Seite.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

32

06.04.2009, 17:29

ohne dafür jetzt einen neuen Thread zu erstellen, wollte ich mal auf meinen Post im SFML forum hinweisen, weil ich dort keine Antwort bekomme:
http://www.sfml-dev.org/forum/viewtopic.php?t=1160
Ist auf englisch, ich hoffe halbwegs verständlich... Man muss sich nicht direkt mit der SFML auskennen, ich denke ich mache irgendeinen Fehler beim Schreiben/Lesen der Dateien... vielleicht könnt ihr mir ja helfen, wäre cool :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

33

06.04.2009, 19:05

wie speicherst du die dinger? einlesen mit >> aus ner binärdatei is irgendwie strange...

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

34

06.04.2009, 19:17

Grade jetzt hab ich zu dem Thema doch noch nen neuen Thread aufgemacht :D
Ich speichere sie ganz normal mit <<... ich dachte, somit kann ich objekte etc ganz einfach auf binärer ebene in eine datei kopieren, und später wenn ich sie wieder auslesen will, ermittelt er automatisch die größe des typs, in den mit >> eingelesen werden soll und kopiert dann so viele bytes aus der datei.... nur bei strings funktioniert das ja schlecht, weil sie keine feste größe haben...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

35

06.04.2009, 19:26

Zitat von »"n0_0ne"«

Ich speichere sie ganz normal mit <<... ich dachte, somit kann ich objekte etc ganz einfach auf binärer ebene in eine datei kopieren, und später wenn ich sie wieder auslesen will, ermittelt er automatisch die größe des typs, in den mit >> eingelesen werden soll und kopiert dann so viele bytes aus der datei


hm das wär mir sehr neu wenn das so gehen würd...wenn du was binär schreiben/lesen willst nimmst du stream.write() bzw. stream. read().

bei string funzt das klarerweise net weil ein std::string auch nur ne normale klasse is und der hält intern im prinzip nur nen pointer auf den speicherbereich wo sein string liegt. wenn du den in die datei schreibst is das natürlich komplett wertlos. aber ich glaub darauf haben dich hier eh schon ein paar hingewiesen ;)

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

36

06.04.2009, 19:30

Was du damit meinst, dass man mich bereits darauf hingewiesen hat, weiß ich grade nicht ^^ aber das ist irgendwie schon klar...
Nur wieso kann ich mit File << String; den String denn vernünftig reinschreiben, nur umgekehrt nicht mehr auslesen?
(btw. wenn das nicht so funktioniert, wie ich es mir vorgestellt habe... wie denn dann? ^^)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

37

06.04.2009, 19:37

Zitat von »"n0_0ne"«

Was du damit meinst, dass man mich bereits darauf hingewiesen hat, weiß ich grade nicht ^^ aber das ist irgendwie schon klar...


naja, spontan seh ich da

Zitat von »"Nox"«

Indem du die Daten serialisiert. Es handelt sich dabei um ein Standardproblem, was wohl im Inet oft gesprochen wird.


Zitat von »"unsigned long"«

container wie strings kann man so nicht serialisieren.


Zitat von »"chriss"«

[...] Jo, deswegen habe ich ja geschrieben das es geht wenn er sich auf einfache Datentypen beschränken kann.
Alles aus STD sowie generell Objekte funktionieren da nicht. [...]


Zitat von »"n0_0ne"«

Nur wieso kann ich mit File << String; den String denn vernünftig reinschreiben, nur umgekehrt nicht mehr auslesen?


weil << so gebaut ist dass es den string zeichenweise rausschreibt. das funktioniert noch weil zeichen ja selber nur einzelne bytes sind.
>> versucht den string zu lesen es liest per default aber nur bis zum ersten leerzeichen, wär also da schonmal falsch.
abgesehen davon ist formatierte i/o einfach nicht die art und weise wie man mit binärdateien umgeht. wenn du das willst nimm textdateien.

Zitat von »"n0_0ne"«

(btw. wenn das nicht so funktioniert, wie ich es mir vorgestellt habe... wie denn dann? ^^)


hab ich doch schon gesagt: mit stream.write() bzw. stream.read()

http://www.cplusplus.com/reference/iostream/ostream/write.html
http://www.cplusplus.com/reference/iostream/istream/read.html

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

38

06.04.2009, 19:48

Ok, ich muss zugeben, ich hab den ganzen Thread hier nicht gelesen... die sachen sind mir aber auch irgendwie klar :D
Nur dachte ich eben auch, dass solche sachen wie fstreams flexibel genug sind, um auch mit strings und so umzugehen... (das schreiben funktioniert ja auch wunderbar) außerdem dachte ich, strings sind im prinzip nichts anderes als \0-terminierte char arrays? Und dann müsste er ja auch wissen, wann der String zu ende ist (im file).
Und was read()/write() angeht... so kann ich das ja schlecht verwenden, ich weiß ja nicht, wie lange der Name ist ^^

Edit: ich glaube die sache mit dem leerzeichen war alles was ich einbauen musste, jetzt scheint es zu funktionieren ^^

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

39

06.04.2009, 20:02

Zitat von »"n0_0ne"«

Nur dachte ich eben auch, dass solche sachen wie fstreams flexibel genug sind, um auch mit strings und so umzugehen...


sind sie ja auch. man muss halt wissen was man für was verwendet...
wenn du den löffel verkehrt rum hältst kannst du auch schwer suppe essen damit. trozdem kann man mit löffeln vorzüglich suppe essen ;)

Zitat von »"n0_0ne"«

[...] außerdem dachte ich, strings sind im prinzip nichts anderes als \0-terminierte char arrays? Und dann müsste er ja auch wissen, wann der String zu ende ist (im file).


wenn er den string nullterminiert rausschreiben würde, dann wüsste er das, ja...

das wort string bezeichnet alles mögliche. aber std::string objekte sind eben dann doch nicht ganz das gleiche wie C strings (was hätten die denn sonst für einen sinn!?) ;)

Zitat von »"n0_0ne"«

Und was read()/write() angeht... so kann ich das ja schlecht verwenden, ich weiß ja nicht, wie lange der Name ist ^^


weist du nicht!?

http://www.cplusplus.com/reference/string/string/length.html

und just in case:

http://www.cplusplus.com/reference/string/string/c_str.html

Zitat von »"n0_0ne"«

Edit: ich glaube die sache mit dem leerzeichen war alles was ich einbauen musste, jetzt scheint es zu funktionieren ^^


pass nur auf dass dich der schein nicht trügt. das was du grad machst mag zwar funktionieren hat aber mit dem was man normal unter "binärem schreiben in eine datei" versteht nicht viel am hut. du schreibst deine strings und ints und was auch immer einfach als text in die datei. natürlich funktioniert das weil zeichen auch nur bytes sind...

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

40

06.04.2009, 21:23

das mit dem binär hab ich auch erstmal verworfen...
nur das mit der length methode bringt mir auch nicht viel... nur wenn ich bereits einen string habe ^^ aber den habe ich ja nicht... ich will ihn ja erst aus der datei lesen ^^ und da kann ich ja length schlecht verwenden, (weil ich noch keinen string habe) und write auch nicht, weil ich nicht weiß, wie groß der string in der datei ist... ^^ aber es funktioniert ja grade... falls wieder probleme auftauchen sollten, meld ich mich :D

Werbeanzeige