Text in Textfile einfügen
-
Hi to all
VS6.0 MFC
Problemstellung:CStdioFile fileo;
fileo.ReadString(strOutput);
strOutput = strOutput + "Rolf \t";
fileo.WriteString(strOutput);
fileo.Close();
--> ich lese einen String aus einer Textdatei z.B. "Hallo \t"
--> strOutput = "Hallo \t Rolf \t"
--> strOutput in Textdatei wieder einfügen.Was passiert:
1. gar nichts.
Es wird nichts geschrieben.
Würde ich <fileo.ReadString(strOutput);> weglassen und strOutput direkt zuweisen, würde mir in der Textdatei alles überschrieben!Wie soll es aussehen:
Textdatei:
"Hallo 'TAB'" <-- Zeile 1
"Wie geht es 'TAB'" <-- Zeile 2jetzt kommt mein Code....
jetzt steht in der Textdatei:
"Hallo 'TAB' Rolf 'TAB' <-- Zeile 1
"Wie geht es 'TAB'" <-- Zeile 2Für Hilfe und Anregungen danke ich schon jetzt mal!
Es grüsst
Rolf
-
wie waere es mit:
CStdioFile file; file.Open(FileString, CFile::modeReadWrite);amsonsten wuerde ich fstream bevorzugen {da kann man auch mit CStrings arbeiten}
zb:
std::ofstream file(csFile, std::ios::out|std::ios::app); file.write(csString, csString.GetLength()); file.close();
-
ach sorry habe ich natürlich gemacht:
CStdioFile fileo;
fileo.Open(TEXT("C:\\MyDoc\\Textdatei.txt"), CFile::modeReadWrite|CFile::shareExclusive|CFile::typeBinary, &fileException))
...
...
CString strOutput("");
fileo.ReadString(strOutput);
strOutput = strOutput + "Rolf \t";
fileo.WriteString(strOutput);
fileo.Close();wie gesagt, das Problem ist trotzdem da!
--------
weiter habe ich jetzt versucht:CString csFile = TEXT("C:\\MyDoc\\Textdatei.txt");
CString csString = "AAA";
std::ofstream file(csFile, std::ios::out|std::ios::app);
file.write(csString, csString.GetLength());
file.close();aber selbes Problem
-> es passiert gar nichts.
Es wird nichts geschrieben.
-
Mr Evil schrieb:
wie waere es mit:
CStdioFile file; file.Open(FileString, CFile::modeReadWrite);amsonsten wuerde ich fstream bevorzugen {da kann man auch mit CStrings arbeiten}
Und wieso sollte man bei CStdioFile nicht mit CStrings arbeiten können? Ich meine CString ist von der MFC und CStdioFile auch, da liegt es ja nahe, dass man CStrings brauchen kann, nicht? ^^
@Rolf
Desweitern kann man nicht einfach so auf eine Zeile zugreifen. Also wenn du ReadString machst, dann liest es eine Zeile weiter. Beim nächsten ReadString oder WriteString ist er auf er nächsten Zeile. Daher musst du entweder alles auslesen, die entsprechenden Zeilen verändern und die Datei leeren und wieder alles hineinschreiben. Oder du probierst etwas mit den CFile Seek Funktionen. Ich weiss leider nicht ob es geht, aber vielleicht könnte es mit einem SeekToBegin gehen. Also auslesen, manipulieren, seektobegin und danach hineinschreiben. Musst halt ein wenig ausprobieren.Edit: Hab gerade noch ein wenig getestet. Ok mit dem Seek geht es nicht, war eigentlich zu erwarten. Daher musst du wohl zuerst alles auslesen Datei, wieder schliessen, dann manipulieren, wieder öffnen mit CFile::modeCreate | CFile::modeWrite und dann wieder alles hineinschreiben.
Vielleicht hat aber jemand noch eine besser Lösung auf Lager.
Grüssli
-
Dravere schrieb:
Mr Evil schrieb:
wie waere es mit:
CStdioFile file; file.Open(FileString, CFile::modeReadWrite);amsonsten wuerde ich fstream bevorzugen {da kann man auch mit CStrings arbeiten}
Und wieso sollte man bei CStdioFile nicht mit CStrings arbeiten können?
ich hab nicht gesagt das man das mit CStdioFile nicht kann - ich sagte auch
da kann man auch mit CStrings arbeiten += wie bei CStdioFile && CFile
#gg
//dazuedit
wie waer es mit append - haengt er immer an eine neue zeile an ? wenn kein \n ist muesste es nach meinem denken angehangen werden
-
Hi Dravere
wenn ich mich nicht verguckt habe, habe ich Deinen Vorschlag auch schon ausprobiert.
-Zitat: ALLES lesen, ändern, schreiben. ok. aber was wenn die Datei in Zukunft mal riesengross ist? (5,10,20MB)-Meine Frage:
Wenn ich eine Textdatei mit einem Editor öffne, kann ich ja auch irgendwo neuen Text einfügen, ohne dass das bestehende überschrieben wird. (ausser Insert-Taste on) und die Zeile wird einfach etwas länger. Das wäre mein Wunsch.
-
habe mal folgendes probiert:
Textdatei-Inhalt:
111 TAB
222 TAB
333 TABProgrammcode:
...
...
fileo.ReadString(strOutput)<=0;
strOutput = strOutput + "AAA";
fileo.Close();fileo.Open(TEXT("C:\\MyDoc\\Textdatei.txt"), CFile::modeReadWrite|CFile::shareExclusive|CFile::typeBinary, &fileException);
fileo.WriteString(strOutput);
fileo.Close();1. Das Schreiben hat zwar jetzt funktioniert, warum auch immer (Read, ändern und gleich wieder write macht wohl Probleme)
2. Textdatei-Inhalt jetzt:
111 TAB AAA2 TAB
333 TABwollte aber:
111 TAB AAA
222 TAB
333 TAB
-
fileo.ReadString(strOutput)<=0; strOutput = strOutput + "AAA\n"; fileo.Close();
-
Hi Mr Evil
wird anschliessend strOutput wieder in das File geschrieben
mit
fileo.Open(TEXT("C:\\MyDoc\\Textdatei.txt"), CFile::modeReadWrite|CFile::shareExclusive|CFile::typeBinary, &fileException);
fileo.WriteString(strOutput);
fileo.Close();steht in der ersten Zeile zwar <111 TAB AAA> jedoch in der zweiten Zeile wurde die '222' gelöscht.
Es muss wohl sein, ganzes File einlesen str.input ganzes File schreiben.
(neben bei, was ich oben geschrieben habe betreffend einem Texteditierprogramm:
dieses list ja auch das ganze File ein bevor ich es mutieren kann!)Thanks to all
Rolf