Text aus Datei in TEdit schreiben
-
@not_registered
datei = fopen(OpenDialog1->FileName.c_str(), "w");Hiermit öffnest du deine Datei aber zum Schreiben. Wenn du lesen willst wäre hier ein "r" nötig.
-
das ist klar, später muss ich ja auch noch rein schreiben. Mit den Edits kann der Text verändert werden.
-
das c_str() brauchst du gar nicht, denn bei dir ist text ja ein C-String, kein std::string.
Deshalb reicht
C/C++ Code:
Edit1->Text = text;
C/C++ Code:
Edit1->Text = text;
C/C++ Code:Nein damit geht es nicht. Die Eigenschaft "Text" vom Edit-Feld will einen AnsiString, was auch immer das ist, wahrscheinlich wieder was Borland-spezifisches. Mit Visual C++ von Microsoft hab ich dieses Problem nicht.
-
Doch das geht. Bitte zeig uns mal die Fehlermeldung.
AnsiString hat mehrere Konstruktoren. Dabei ist auch einer der char* übernimmt.
-
Braunstein schrieb:
Doch das geht. Bitte zeig uns mal die Fehlermeldung.
AnsiString hat mehrere Konstruktoren. Dabei ist auch einer der char* übernimmt.Der Comiler meldet kein Fehler, allerdings kommt nach dem Öffnen der Textdatei eine Zugriffsverletzungs-Meldung, die nicht kommt wenn ich die Text-Zuweisung auskommentiere:
void __fastcall TForm1::Button1Click(TObject *Sender) { FILE * datei; char *text; if (OpenDialog1->Execute() == true) { datei = fopen(OpenDialog1->FileName.c_str(), "w"); fgets(text, 50, datei); //Edit1->Text = text; fclose(datei); } }
-
Du solltest vielleicht text noch etwas Speicher zuweisen. fgets macht das nicht.
-
Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
also, das problem lag daran, dass fgets() auch den Zeilenvorschub ('\n') liefert, außerdem hab ich jetzt als text-variable char[50] genommen.
siehe da:
void __fastcall TForm1::Button1Click(TObject *Sender) { FILE * datei; char text[50]; memset(text, '\0', strlen(text) - 1); if (OpenDialog1->Execute() == true) { datei = fopen(OpenDialog1->FileName.c_str(), "r"); fgets(text, 50, datei); text[strlen(text)-1] = '\0'; Edit1->Text = text; fclose(datei); } }
-
Der Zeilenvorschub stört hier nicht (höchstens optisch). Das Problem lag einzig und allein am fehlenden Speicher.
-
Hallo
Natürlich könnte man auch auf C-Strings und FILE verzichten und gleich std::fstream oder TStringList verwenden um gleich String-Klasse zu benutzen ohne Umweg über C-String.
bis bald
akari