Textfile programmierung... Hilfe! Fehler!
-
Hi leute,
Ich programmiere mit VC++ .Net auf der Graphischen Oberfläche, und habe hier folgendes Problem:
Ich will den Inhalt einer Textdatei einlesen, und den Inhalt dann in der Variablen x abspeichern. In der textdatei steht in der ersten Zeile eine zahl, deshalb sollte es doch klappen x als Integervariable zu vereinbaren. Aber immer wenn ich das jetzt Programm starte, kommt der Fehler:Debug Assertion Failed!
Program: ...
File: fgets.c
Line 57Expression: (str != NULL)
...
Ich weiß nicht, was das jetzt bedeutet, oder wie ich den jetzt beheben kann.
Mein code:
FILE* txtfile; char line[512]; int x; if (fgets( line , sizeof(line), txtfile) == NULL) { MessageBox::Show("loading file failed! "); } else { x = System::Convert::ToInt32(line); }
Kann man denn überhaupt eine Textdatei so einlesen, oder muss man das anders machen?
Ich würde mich über jede Antwort freuen,
Sixtenz
-
schaust du mal auf den Beitrag hier
http://www.c-plusplus.net/forum/viewtopic-var-t-is-203436.html
da hab ich es beschrieben
sollte bei dir nicht anders gehen.Ansonsten poste mal den gesamten Code von Dir
dann kann ich das mal compilierenmöchtest du nur die Zahl rauslesen
ist der Rest der Datei String
dann ginge das auch wenn du den Code
den ich gepostet habe etwas umbaustGruß Matthias
-
Hi,
also hier noch einmal mein ganzer Code. Ich habe den on dier ausprobiert, aber er geht nicht.private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) //Ich habe den Timer eingebunden, damit das Programm automatisch den Inhalt einliest. //Also: "aktualisiert" { FILE* txtfile; char line[512]; int x; fopen_s(&txtfile, "Dateipfad+name", "r" ); //Diese Zeile öffnet die Datei. Habe ich schon vorher im Code gehabt, kp warum ich es oben nicht hingeschrieben hab. if (fgets( line , sizeof(line), txtfile) == NULL) //den Befehl fgets habe ich aus der msdn von Microsoft { MessageBox::Show("loading file failed! "); } else { x = System::Convert::ToInt32(line); //Ich speichere den Inhalt erst einmal in die x-Variable, da dann später alle mit ... = x; getan ist TextBox1->Text = System::Convert::ToString(x); //Diese Zeile habe ich noch hinzugefügt, um zu zeigen, was ich mit dem Inhalt ah´nfangen wollte. } } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { timer1->Enabled = true; //Er soll, sobald man das Programm startet, immer "aktualisieren" }
So. Das ist mein ganzer Quellcode.
Ich hoffe ihr könnt mir helfen,Sixtenz
-
Benutze doch auch die .NET Möglichkeiten im Namespace System::IO um Files zu lesen und zu schreiben. Ist sehr viel komfortabler als mit FILE*.
Oder gibts dafür gute Gründe, warum Du noch die C-Variante für File lesen/schreiben benutzt?
Simon
-
Hi, danke für die Antwort.
Ich habe mal diese variante mit System::IO... ausprobiert. Das Ergebnis:
System::IO::File::ReadAllLines("bin\\log.txt");
Jetzt ist es aber so, dass ich das nicht in einen Integer umwandeln kann. System::Convert... klappt nicht.
Kann mir einer sagen was ReadAllLines zurückgibt und wie man das in einen Integer oder so Convertiert?
Gruß,
Sixtenz
-
MSDN:
http://msdn2.microsoft.com/en-us/library/s2tte0y1.aspxZurückgegeben wird ein Array aus System::String^
Probiere dann Linie für Linie System::Int32::Parse(...) ...Edit: Schlussendlich kommts auf das Format in deinem File an.
Simon
-
Hi, Jetzt klink ich mich auch mal ein.
Ich bin noch ein ziemlicher noob in VC++. deshalb weiß ich nicht wie das geht mit
Zurückgegeben wird ein Array aus System::String^
Probiere dann Linie für Linie System::Int32::Parse(...) ...Ich habe bis jetzt noch nie mit arrays gearbeitet. Wie kann man denn jetzt die Zeilen nacheinander in ein String packen?
Ich hoffe ihr antwortet mir.
Kasus Knacktus
-
hallo,
Also ich habe jetzt mal die Variable line als Array definiert:
array<String^>^ line; line = System::IO::File::ReadAllLines("bin\\log.txt");
Das compiliert er auch schon . Die variable line kann ich jetzt auch convertieren.
Allerdings wird mir, wenn ich jetzt line anzeigen will mit:toolStripStatusLabel1->Text = System::Convert::ToString(line);
nur System.String[] angezeigt. habe ich jetzt noch irgentetwas vergessen, oder falsch gemacht?
Sixtenz
-
hallo,
Also es klappt jetzt. Ich habe nur vergessen den Array an der Stelle 0 anzeigen zu lassen.
Danke für eure hilfe,
Sixtenz