Hilfe bei String-Kuriuosum


  • Mod

    Vielleicht solltest Du einfach mal die Doku zu EM_FMTLINES lesen:
    http://msdn2.microsoft.com/en-us/library/aa453003.aspx

    Notepad 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


  • Mod

    Oder man ermittelt einfach mit CFile:GetStatus die Dateigröße und allokiert den Buffer entsprechend.



  • CFile::GetLength sollte auch tun


Anmelden zum Antworten