tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
2015
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    chuqa chuqa ist offline Mitglied
    Registriert seit
    Jun 2007
    Beiträge
    12
    Hi,

    also ich habe einen CString, ermittle seine Länge und schreibe das Ergebnis in eine Datei. Allerdings fehlt ein Stück. Wenn ich die Anzahl der Bytes, die in die Datei geschrieben werden verdopple steht alles in der Datei. Kann mir jemand sagen wie das kommt?
    Folgender Code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    int length = outstr.GetLength();
    // length *= 2; // dann funktionierts
    if (file.Open(m_strFileName, CFile::modeCreate | CFile::modeReadWrite, &ex)){
        // AfxMessageBox(outstr, MB_OK);
        file.Write(outstr, length);
        file.Close();
    }
    gruß chuqa
     

  2. #2
    semnix semnix ist offline Grünschnabel
    Registriert seit
    Mar 2007
    Beiträge
    1
    Versuchs mal mit

    file.Write(outstr.GetBuffer(length), length);
    outstr.ReleaseBuffer();
    file.Close();

    Für Variablennamen jeglicher Art solltest du eine Identifikationsmöglichkeit einbauen d.h

    CString strName("");
    int nName(0); // Ich verwende hier bewusst "n" da "n" in diesem Fall die Zahlenmenge N angibt, üblich ist wohl "i" für Integer
    char cName("");

    gewöhn dir sowas lieber gleich an, irgendwann wächst der Code und du musst dann immer nachschauen von welchem Typ die verwendete Variable ist.
     

  3. #3
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo,

    das kann daran liegen, das dein Projekt UNICODE verwendet und damit alle Strings 2 Byte pro Zeichen verwenden. Die Methode "GetLength()" gibt dir aber nur die Anzahl der Zeichen, unabhängig von ihrem Speicherbedarf, zurück.
    Die benötigte Puffergröße sollest du daher so ermitteln:
    Code cpp:
    1
    
    int length = outstr.GetLength() * sizeof(TCHAR);
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  4. #4
    chuqa chuqa ist offline Mitglied
    Registriert seit
    Jun 2007
    Beiträge
    12
    @MCoder: danke, so läuft es korrekt

    @semnix: Hast ja Recht, ich halte mich eigentlich auch an die Code Conventions. Der Quelltext stammt aus einem Testfile, deswegen nicht die Einhaltung der Konventionen. Aber stimme dir zu, man sollte das eigentlich konsequenter Weise überall einhalten .

    Danke euch
     

Ähnliche Themen

  1. CString in CFile schreiben
    Von Alex braucht Hilfe im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 08.07.10, 09:03
  2. Ant compiliert nicht kompletten Code
    Von Klopfer im Forum Java
    Antworten: 2
    Letzter Beitrag: 01.05.09, 19:29
  3. CFile und CString
    Von SCIPIO-AEMILIANUS im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 28.09.07, 16:35
  4. Antworten: 15
    Letzter Beitrag: 26.10.04, 15:06
  5. CFile read Line/write Line
    Von the_duke_at im Forum VisualStudio & MFC
    Antworten: 0
    Letzter Beitrag: 24.07.04, 14:00