CStdioFile WriteString()
-
Hallo
Habe ein kleines Problem.
(VS 2005 C++ / MFC)Ich versuche gerade ein kleines "Notepad" zu schreiben.
Jetzt habe ich ein kleines Problem.
Ich lese den Dateiinhalt mit fstream ein.Mit CStdioFile ----> WriteString()
speichere ich den Inhalt in eine Datei.Wenn ich eine Datei öffne, bearbeite und speichere und anschliessend wieder öffne
sieht sie ganz normal aus.
Doch wenn ich sie wieder öffne, bearbeite, speichere und wieder öffne
kommt an denn Stellen wo eine Zeile endet ein "Quadrat".Hier ein Beispiel:
1)
Datei öffnen und eine zweite Zeile schreiben.
---- Dateiinahlt ----
erste zeile
zweite zeile
---- !Dateiinahlt ----
Datei speichern und schliessen.Datei öffnen und eine dritte Zeile schreiben.
---- Dateiinahlt ----
erste zeile
zweite zeile
dritte zeile
---- !Dateiinahlt ----
Datei speichern und schliessen.Datei öffnen und eine vierte Zeile schreiben.
---- Dateiinahlt ----
erste zeile // Hier erscheint ein Quadrat
zweite zeile
dritte zeile
---- !Dateiinahlt ----
Datei speichern und schliessen.Datei öffnen..
---- Dateiinahlt ----
erste zeile // Hier erscheinen 2 Quadrate
zweite zeile // Hier erscheint ein Quadrat
dritte zeile
vierte zeile
---- !Dateiinahlt ----usw..
Kommt jemand nach was ich meine?

Gruss
-
Hm du musst beim Zeilenumbruch drauf achten, dass Windows das ja gern als \n\r kodiert und nicht nur als \n.
Nun weis ich nicht welches Steuerelement du zur Ansicht nimmst: CEdit oder CRichEdit. Bei dem CEdit tritt glaube der von dir beschriebene Effekt auf.
-
Danke für die Schnelle Antwort.
Ja. Beim einlesen einer Zeile füge ich immer ein \r\n an.
(Öffnen und Datei in CEdit anzeigen hat bis jetzt noch nie Fehler verursacht.)
Erst seit ich die Speichern-Funktion geschrieben habe.
Diese sieht so aus:CStdioFile writeFile(strFileName, CFile::modeCreate | CFile::modeWrite); writeFile.WriteString(strText); writeFile.Close();
-
Wenn ich einen Breakpoint in der Schreibfunktion einfüge,
und die CString Variable strText unter die Lupe nehme hat es auch diese Quadrate drin.
Sollte das die WriteString Funktion nicht irgendwie erkennen?
-
Wenn Du CStdioFile ohne den typeBinary öffnest wird ein \n immer in eine \r\n Sequenz expandiert. Das wird dann natürlich falsch beim wiedereinlesen wenn es bereits \r\n Sequenzen waren!
Also einfach Datei mit typeBinary öffnen!
-
Super. Hat geklappt.
Doch jetzt klappt das einlesen nicht (fstream). :-S
(Andere Textfiles (vom System usw..) werde aber korrekt angezeigt.)
Die Datei sieht im Notepad korrekt aus. Aber in meine Editor nicht.
Ist wohl am besten wenn ich die lese Funktion auch auf cstdiofile umschreibe?!?Lese-Funktion
fstream readFile; readFile.open(strFileName); bSetNewLine = FALSE; strWindowText = ""; while(readFile.getline(strStream, 1024)) { if(bSetNewLine == FALSE) { bSetNewLine = TRUE; } else { strWindowText += "\r\n"; } strWindowText += CString(strStream); } readFile.close(); delete readFile;EDIT:
Ja.. jetzt mit CStdioFile::ReadString() funktioniert es!Vielen Dank!