CFile.Write speichert nicht kompletten CString

chuqa

Grünschnabel
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:
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
 
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.
 
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:
C++:
int length = outstr.GetLength() * sizeof(TCHAR);
Gruß
MCoder
 
@MCoder: danke, so läuft es korrekt :D

@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
 

Neue Beiträge

Zurück