Absturtz nach lesen der Datei in Array
-
Hallo,
ich hab folgendes Problem.
Ich möchste Namen in ein Array schreiben und Speichern. Das klappt auch.
Nur wenn ich die Daten wieder in das Array laden möchste aus der Datei stürzt er kurz danach immer ab. Der Absturz erfolgt entweder nach ca 10sek oder wenn ich das fenster bewege.String namen[8]; ifstream datei; datei.open("name.bsp",ios::in|ios::binary); if (datei) { int i=0; while (i<=7) { if (!datei.read(reinterpret_cast<char*>(&namen[i]),sizeof(namen))) ShowMessage("Fehler"); ++i; } } datei.close();
-
Hallo
Du kannst ein Array aus String nicht so einfach binär speichern. Schau dir mal die entstandene Datei in einem Hexeditor an, du wirst nur ein paar Speicheradressen sehen und nicht deine Texte. Außerdem darfst du auch einen einzelnen String nicht auf diese Art binär laden, ein String muß ordentlich über die in die String-Klasse vorhandenen Operatoren/Funktionen gefüllt werden.
Du wirst nicht umhinkommen eine ordentliche iterative Lösung zu schreiben, wo du jeden einzelnen String in den Stream schiebst. Und das binärschreiben solltest du auch sein lassen, das bringt bei variabl langen Strings eigentlich keinen Vorteil. Verwende lieber z.b. ein Zeilenumbruch als Trennzeichen, dann kannst du die Datei auch sehr einfach über den Stream wieder einlesen. Um (Ansi-)String und std::fstream gut miteinander benutzten zu können must du den Hinweis aus der BCB-Hilfe zu AnsiString beachten :
Wenn Sie #include <iostream> oder #define VCL_IOSTREAM angeben, bevor Sie die include-Anweisung für die Datei dstring.h (die normalerweise indirekt durch die Datei vcl.h einbezogen wird) festlegen, können Sie die Streaming-Operatoren (<< und >>) mit AnsiStrings als Argument verwenden:
ostream& operator << (ostream& os, const AnsiString& arg);
istream& operator >> (istream& is, AnsiString& arg);Weiteres zum Umgang mit std::fstream findest du im C+ Forum und in der dortigen FAQ (Siehe Artikel "Dateien und Ströme")
Du kannst aber im Builder eine für AnsiString elegantere Möglichkeit zum Textdateischreiben und -lesen benutzen : TStringList. Siehe Builder-Hilfe, Forumssuchfunktion und FAQ in diesem Forum.
bis bald
akari
-
merci.
hat mir weiter geholfen