Problem: aktuelle Zeit und CString
-
Hi,
ich bins mal wieder.

Ich will in ein File Daten so schreiben, dass die "neuesten" Daten immer am Fileanfang stehen und die Daten, die schon vorher im File standen, sollen durch einen Art Abstandhalter dann weiter unten im File stehen.Dieser "Abstandhalter" dient zur optischen Unterscheidung der Daten. Es soll im File also z.B. so aussehen:
neu1
neu2=== old Data (14.12.08 (09:40:00)===
alt1
alt2Soweit so gut, ich setz mir diesen String in der Anwendung zusammen, nur hab ich noch ein Problem mit dem Datum und der aktuellen Zeit, das im String ja wie oben gezeigt auch stehen soll.
Bin bis jetzt soweit (Auszug):CString abstand = "\r\n\r\n=== old Data ==="; // "Abstandhalter" zwischen alten und neuen Daten struct tm newtime; time_t aktZeit = time(NULL); errno_t error = localtime_s(&newtime, &aktZeit); if (!error) { CString myTime; // (Day.Month.Year (hh : mm : ss)) myTime.Format("(%s.%s.%s (%i : %i : %i))", newtime.tm_mday, newtime.tm_mon, newtime.tm_year, newtime.tm_hour, newtime.tm_min, newtime.tm_sec); // hier gibts dann das Problem abstand += myTime; } abstand += "\r\n"; WriteFile(hWrite, abstand, abstand.GetLength(), &dwBytesWritten, NULL);Nur krieg ich noch ne "Access Reading Violation", die Stelle dazu sieht so aus (in output.c):
#else /* _UNICODE */ if (flags & (FL_LONG|FL_WIDECHAR)) { if (text.wz == NULL) /* NULL passed, use special string */ text.wz = __wnullstring; bufferiswide = 1; pwch = text.wz; while ( i-- && *pwch ) ++pwch; textlen = (int)(pwch - text.wz); /* textlen now contains length in wide chars */ } else { if (text.sz == NULL) /* NULL passed, use special string */ text.sz = __nullstring; p = text.sz; while (i-- && *p) // hier hält er an... ++p; textlen = (int)(p - text.sz); /* length of the string */ }Mich verwundert dieses UNICODE bei #else...
Was mach ich hier falsch ??
Wäre net schlecht, wenn jemand was dazu sagen kann.Und natürlich schon mal vielen Dank !!
-
Im Projektexplorer mit rechter Maustaste auf das Projekt klicken, Konfigurationseigenschaften -> Allgemein -> Zeichensatz
Bei Neuanlage eines Projektes ist Unicode die Standardeinstellung!!!
-
Hatte das vergessen zu erwähnen, kann da nur Multi-Byte verwenden, weil ich im Projekt eine DLL verwenden, die nur Multibyte verwendet.
Kann von daher kein Unicode verwenden.
-
Die Struktur tm enthält nur ints und keine Strings... Schau dir das CString.Format mal an.
Das #else _UNICODE wird klar wenn du bis zum #if hochscrollst

Bedeutet du verwendest ASCII (char als Datentyp anstelle Unicode und wchar_t).
-
Du kannst doch Unicode in Multibyte umwandeln (oder andersrum).
MultiByteToWideChar oder WideCharToMultiByte
-
Ok, ich danke euch erstmal, aber ich hab das doch noch etwas anders gelöst (ziemlich einfach):
... // aktuelle Zeit holen CString abstand = "\r\n=== old Data "; CString myTime; CTime curTime = CTime::GetCurrentTime(); myTime.Format("[%i.%i.%i (%d : %d : %d)]", curTime.GetDay(), curTime.GetMonth(), curTime.GetYear(), curTime.GetHour(), curTime.GetMinute(), curTime.GetSecond()); abstand += myTime + " ===\r\n"; WriteFile(hWrite, abstand, abstand.GetLength(), &dwBytesWritten, NULL); WriteFile(hWrite, oldText, oldText.GetLength(), &dwBytesWritten, NULL); ...
-
Ich hoffe, das ist OK, wenn ich mein anderes Problem auch gleich hier schildere:
Ein Problem hab ich noch, ich will in meiner MFC-Anwendung die Zeilen zählen, die einem File stehen, deren Inhalt ich dann zwischenspeichere (hatte ich weiter oben schon mal erwähnt).Hab das jetzt erstmal fix mit der 20 in der Bedingung gelöst, will aber solange zählen und aus dem File lesen, wieviel ich Zeilen im File habe und jede Zeile dann in einen CString schmeißen.
Hier die Stelle dazu:... CStdioFile FileToRead("messages.txt", CFile::modeRead | CFile::typeText); for (unsigned int i = 0; i < 20; i++) { FileToRead.ReadString(oldTextToRead); oldText += oldTextToRead + "\r\n"; } FileToRead.Close(); ...Weiß eben noch nicht genau, wie ich das formulieren soll, stehe grad ziemlich aufm Schlauch.

Vllt kann mir da mochmal jemand helfen !?Und danke wieder im Voraus.
-
realisiere das ganze mit einer while-schleife, Readstring wird solange ausgeführt, bis das Dateiende erreicht ist, dazwischen baust Dir
Deinen Zeilenzähler ein.
-
realisiere das ganze mit einer while-schleife, Readstring wird solange ausgeführt, bis das Dateiende erreicht ist, dazwischen baust Dir
Deinen Zeilenzähler ein.
-
Ok, super, vielen Dank !!
Natürlich, eigentlich ganz simpel, naja manchmal ist man eben...
Danke und nen schönen Abend