CFile kontra fprintf - wie überprüfe ich den Inhalt ?
-
Das "a" entspricht CFile::modeNoTruncate.
Du brauchst also vermutlich CFile::modeWrite|CFile::modeCreate|CFile::modeNoTruncate
-
CFile::modeNoTruncate hab ich wohl geschmeidig überlesen
ich hab bisher immer versucht die Datei zu öffnen und wenn das schief ging hab ich die Datei erstellt.
-
Die Flagkombination, die ich oben geschrieben habe, ist extrem praktisch - ich nutze eigentlich IMMER nur die.
Zumindest für das Schreiben.
-
ist denk ich mal auch performanter, obwohl der geschwindigkeits unterschied wohl nicht bemerkbar ist bei den Dimensionen mit denen ich arbeite aber es geht ja ums prinzip ^^
-
Danke Euch allen ! Das truncate ist echt ne Hoffnung ! Aber nun steht in meiner Datei irgendwie nur ein einziges "L" ! Wie kommt das denn ??? Mein Code:
if (file.Open(dateiname, CFile::modeWrite | CFile::modeCreate | CFile::modeNoTruncate, &e )) { if (file.GetLength() == 0) { text.Format(_T("Log file Bsp1 %s %s\n"), geraet, typ); } else { text.Format(_T("Bsp2 %s %s\n"), geraet, typ); } file.SeekToEnd(); file.Write(text, sizeof(text)); // evtl. auch: file.WriteString(text); ??? file.Close(); } // end if else { MessageBox(L"Fehler beim Dateiöffnen",L"Error"); }
Die Datei wird richtig erstellt, mit genau mit dem Namen, den ich per Variable dateiname festgelegt habe, aber dann wird eben nur das eine L reingechrieben. Mehr nicht.
-
plz benutz Code-Tags
-
Sorry, in der Hektik gerade vergessen. Hab ich nach dem Einstellen auch selbst gemerkt. Hoffe, mir kann trotzdem geholfen werden !
-
Stefan897987 schrieb:
file.Write(text, sizeof(text));
text ist ein CString, richtig? In dem Fall gibt sizeof(text) bestimmt nicht die Länge der kontrollierten Zeichenkette an, sondern die Größe der Steuerklasse (sind ca. 1 bis zwei Pointer, also max. 4 Byte) - du benötigst, wenn überhaupt, text.Length()*sizeof(TCHAR).
-
Ja, text ist ein CString. Aber Dein text.Length()*sizeof(TCHAR) versteh ich nicht ganz. Soll das irgendwie anstelle von sizeof stehen ? (bin doch noch ein ziemlicher C++-Newbie !)
-
Ich habe die Code-Tags mal nachgebessert.
Melde dich doch an, dann kannst du editieren.Falls das mit dem Schreiben gar nicht klappt, stell auf CStdioFile um, das geht ganz einfach und dann kannst du statt Write WriteString nehmen, das weiß selber, wann der String zu Ende ist.
-
Stefan897987 schrieb:
Ja, text ist ein CString. Aber Dein text.Length()*sizeof(TCHAR) versteh ich nicht ganz. Soll das irgendwie anstelle von sizeof stehen?
Ja, das sollte anstelle des sizeof(text) stehen - text.Length() gibt die Länge des Strings in TCHARs an, mit sizeof(TCHAR) bestimmst du die Größe eines Zeichens in Byte (je nach Projekteinstellungen ist das 1 (ASCII) oder 2 (UNICODE)), mit der Multiplikation erhältst du also die Länge des Strings in Byte -> genau das benötigt CFile::Write() zum Schreiben.
-
Folgende Fehlermeldung kommt aber, wenn ich das so eins zu eins übernehme und einfüge anstelle von sizeof(text):
C:\blubbblubb\test.cpp(239) : error C2039: 'Length' : is not a member of 'CString'
c:\programme\windows ce tools\...\include\afx.h(474) : see declaration of 'CString'
-
Das heißt GetLength.
-
Sorry, mein Fehler - das kommt davon, wenn man so selten mit der MFC arbeitet.
-
Stimmt, hieß GetLength, hätte ich auch selbst drauf kommen können. Jetzt kommt keine Fehlermeldung mehr, aber es steht immer noch nur L in der Datei. Merkwürdigerweise ist sie aber 2,17 KB groß !
-
Poste doch einfach mal den betreffenden Code!
-
hab ich bereits, siehe oben !
-
Hast du es schon mit Debuggen versucht?
-
Ja, aber aus den Werten die einem da gegeben werden werd ich ja nun gar nicht schlau (r5, r1, r8, lsr r9) und die Fehlermeldungen die ich bis zu einer bestimmten Cursorpostion ausgegeben kriege, passen irgendwie auch nicht. denn das hat nichts mit meinem problem zu tun.
-
poste doch bitte trotzdem noch mal wie es jetzt gerade aussieht, du hast doch ein paar Änderungen vorgenommen?