Hilfe bei String-Kuriuosum
-
Tja eigentlich habe ich ja ins C++ Forum geschrieben, da ich gehofft habe, dort eine allgemeine Lösung für mein Problem zu finden.
Ich geben mich auch sehr gerne mit einer nicht MFC Klassenlösung zufrieden, daher habe ich nicht ins MFC gepostet. Mein Problem besteht in der Darstellung eines Strings, das ein absolut allgemeines Problem ist, und eigentlich mit MFC garnichts zu tun hat....
-
Vielleicht solltest Du einfach mal die Doku zu EM_FMTLINES lesen:
http://msdn2.microsoft.com/en-us/library/aa453003.aspxNotepad ist nichts anderes als ein Edit Control, und was Du dort siehst sind Soft-Line-Breaks!
Ansonsten müsstest Du mit CStdioFile typeBinary exakt die Daten so bekommen wie sie in der Datei stehen. Was das Edit Control daraus macht ist was anderes!
-
Ok vielen Dank, es geht nun mit Binary, wenn ich dann die \n 's wieder hinzufüge.
Dann erhalte ich zwar noch eine zusätzliche Leerzeile (wenn ich die wegmache, hat aber der string nicht mehr die selbe länge wie vorher) die ich aber beim einlesen einfach auslassen kann.Auf jeden Fall wird nun mein Notepad ( ja richtig es ist ein CRichEditCtrl ) nun mit den alten Daten wieder korrekt befüllt.
Ich bin zwar immer noch verwirrt, aber glücklich das es jetzt geht

-
wie wär's, wenn du dir einfach mal die Beschreibung von ReadString durchliest?
http://msdn2.microsoft.com/en-us/library/x5t0zfyf(VS.80).aspx
Spezielles Augenmerk bitte auf die Remarks-Sektion...!
-
Das habe ich schon, nur leider problematisch, wenn der String sich zur Laufzeit ständig ändert und man kein char[] initialisieren kann.
Ausserdem besteht der String den ich speichere ja selbst auch aus einem mix aus buchstaben und escape characters, und beim einlesen interpretiert readstring diese escape characters als endlines und beendet das einlesen der Zeile, aber das character selbst brauche ich ja noch.. daher muss ichs ja wieder hinter dran klatschen, damits wieder stimmt...
Und im Hex Editor stand ja ein \n und kein \0 im Original...
-
Ja, aber genau das steht doch dort: ReadString liest bis zum ersten newline character. Und wenn in deiner Datei ein \n steht, dann ist das ein newline character...!
Wenn du wirklich exakt das haben willst, was in der Datei steht, dann musst du eben Read verwenden. Wieso du keinen char initialisieren kannst, verstehe ich nciht.
-
Ja ich wollte das ursprümglich auch mit Read lösen.
Ich habe dann geschrieben
readTextSize = atoi(strTemp); // Das Problem war hier CStdioFile openFile; char pbuf[readTextSize ]; openFile.Read( pbuf, readTextSize );die Länge des Strings steht ja auch mit im File, und so konnte ich das Array nicht initialisieren, weil ich ja garnicht weiss wie groß es ist.
Da ICH keinen dynamischen Array anlegen kann, habe ich halt die Zeichen wieder drangefügt, was zumindest im binärmode ging...
-
Multiplex schrieb:
Ja ich wollte das ursprümglich auch mit Read lösen.
Ich habe dann geschrieben
readTextSize = atoi(strTemp); // Das Problem war hier CStdioFile openFile; char pbuf[readTextSize ]; openFile.Read( pbuf, readTextSize );Das ist so auch nicht moeglich
char pbuf[readTextSize]; // readTextSize muss bereits zur compilezeit bekannt sein //um es dynamisch zu machen char *pbuf = new char[readTextSize]; // work with the pointer pbuf delete [] pbuf; pbuf = 0;
-
OK vielen Dank.
Da ich jetzt allerdings noch viel vor mir habe, weiss ich nicht, ob ich das nun ändern soll, und wieder (vielleicht stunden) damit zu verbringen, bis es dann wieder so geht wie jetzt
Aber bei meinen nächsten Projekten werde ich mir das im Hinterkopf behalten
Danke nochmals
-
Oder man ermittelt einfach mit CFile:GetStatus die Dateigröße und allokiert den Buffer entsprechend.
-
CFile::GetLength sollte auch tun