Problem mit Textdateien
-
Du mußt schon alle Parameter für fgets() angeben

PS: Ein Vorschlag von mir: Verwende lieber fstreams anstelle der C Dateifunktionen.
-
Ja klar, das hatte ich ganz vergessen. Danke
Aber wie übergebe ich nun die Zeilen an das Listenfeld?
Ich hab für das Listenfeld auch schon eine Variable definiert m_cltLISTOUTPUT.
Wie gesagt, ich bin da noch super neu drin und ich verstehe das gerade erst so langsam
Und was hat das mit dem fstream aufsich?Vielen dank für die weitere Hilfe.
-
Das einfachste ist:
- Du erzeugst eine Dialog Anwednung mit dem Wizard.
- Packst eine ListBox in den Dialog.
- Fügst eine Memeber Variable für die Listbox
- Packst den Code zum Lesen nach OnInitDialog
- Fügst jede Zeile mit AddString in die Listbox.
-
Ich hab jetzt das jetzt alles eingerichtet und den Code nach meinem Verständniss aufgeschrieben.
Er kompiliert auch ohne Probleme durch.
Doch wenn ich die Option in meiner Menü-Leiste aufrufe bekomme ich den folgenden Fehler:Debug Assertion Failes
file: fgets.c
Line 60
Espression : str != NULLWenn ich Meldung dann ignoriere dann sagt das Programm mir:
Memory could not be read.Hab ich im Code noch was falsch gemacht?
FILE * data; data = fopen("c:\\test.txt", "r+"); char acTmp[255]; while (fgets(acTmp,'\n',data)) { m_ctlLISTOUTPUT.AddString("acTmp"); } fclose(data);
-
der fgets()-Aufruf in deinem ersten Beispiel war doch schon in Ordnung - warum bastelst du da noch an den Parametern herum?(und nebenbei wird dieser Code dir die Ausgabeliste mit "acTmp"-Einträgen füllen)
-
Hmm, okay. Dann nochmal.
Ich hab das mit den Parametern wieder geändert und es sieht jetzt so aus:while (fgets(acTmp,255,data)) { m_ctlLISTOUTPUT.AddString("acTmp"); }Wenn ich die Parameter nicht so angebe, dann kommt da wieder der C2660 Error, wie oben.
Ich dachte, dass in dem acTemp die einzelnen Zeilen zwischen gespeichert werden?!
Oh man, langsam bin ich ein wenig verwirrt
Könntet ihr mir vieleicht mit einem Codeschnipsel auf die Sprünge helfen?
-
Erstmal solltest du die Anführungszeichen bei dem AddString()-Aufruf weglassen (wir sind hier nicht bei PHP).
Zweitens: Ja, in acTemp landet die aktuelle Eingabezeile, die du auch auswerten kannst. Aber eventuell solltest du trotz allem eine Sicherheitsabfrage einbauen, ob die Datei korrekt geöffnet werden konnte.
Drittens: Auch wenn ich mich widerhole - nimm lieber fstream's (oder CFile):
ifstream data("..."); string zeile; while(getline(data,zeile)) { m_ctlLISTOUTPUT.AddString(zeile.c_str()); }
-
Oder:
// Grundidee **OHNE** jegliche Fehlerbehandlung CFile inFile("c:/test.txt", CFile::modeRead); CArchive archive(&inFile, CArchive::load, inFile.GetLength()); CString line; while (archive.ReadString(line)) { m_ctlLISTOUTPUT.AddString(line); } archive.Close(); inFile.Close();
-
Also nochmals danke das ihr so viel Geduld mit mir habe

Ich hab das ganze, wie in deinem Code nach ifstream umgestellt und muuste mich da eine Menge mit Libs herumschlagen, bis die alle korrekt eingebunden waren.
Allerdings habe ich dann einen Fehler bekommen der sagt, dass er die MSVCP60D.dll nicht findet. Ich habe diese DLL auch in den Ordner meiner .exe gelegt aber er will die exe immer noch nicht ausführen.
Ich hab dann mal von Debug auf Release umgestellt und dann funzt das.
Das mit der Listbox etc. hab ich jetzt ja auch verstanden, aber irgendwie gibt er trotzdem nix aus
Der Pfad der Textdatei lautet:
H:\My Databases\Trace Projekt\Debug und in dem Debugordner liegt dann die .txt.
Hier nochmal mein Codeifstream data("h:\\\Test.txt"); string zeile; while(getline(data,zeile)) { m_ctlLISTOUTPUT.AddString(zeile.c_str()); }
-
Dann mußt du auch den kompletten Pfad angeben - du versuchst die Datei 'test.txt' im Stammverzeichnis von Laufwerk H: zu öffnen.
(Alternativ kannst du auch einen relativen Pfad angeben - wenn du das "H:\" weglässt, sucht das Programm die Datei im aktuellen Arbeitsverzeichnis.)
-
h:\\\Test.txt
Wird zu
h:\<tabctrl-Zeichen>est.txt
-
Ich werde da nochmal n bissel rumprobieren.
Der Kompieler meckert da irgendwie, dass Addstring die Konvertierung des Parameters 1 von 'const char *' in 'LPCTSTR' nicht möglich macht.Vielen Dank für die Hilfe
