(MFC mit dem...) Writefile und CString
-
Wenn ich versuche einen CString in eine Datei zu speichern wird die Länge des Strings zwar richtig erkannt, jedoch wird dieser String getrennt mit hex 00 abgespeichert:
z.B. Eingabe 12345
MessagBox meldet 12345
in der Datei steht 1 2 3
WIESO?
Bitte dringend um Hilfe
Danke im Voraus
-
Ich würde sagen du hast Unicode aktiviert.
// Länge in Bytes: CString str; str.GetLength() * sizeof TCHAR;
-
Danke für deine schnelle Antwort
Das klappt dennoch irgendwie nicht...
hier ist der Teil der mir Probleme macht!Ich gebe z.B. eine Id des Typs CString ein, anschließend speicher ich diese und das Problem habe ich immer noch... Wenn ich jedoch den CString in Int konvertiere und diesen wiederrum in Char dann funktioniert das Ganze, jedoch habe ich dann Probleme wenn ich nur 0000 eingebe!!!
Was mache ich falsch!
(Kann ich Dir das Programm zukommen lassen?)
Danke
-
Du könntest einfach Unicode deaktivieren...
oder z.B.
CString str("Mein Text"); int count = str.GetLength(); char* temp = new char[count + 1]; for(int i = 0;i < count;++i) temp[i] = static_cast<char> (static_cast<LPCTSTR> (str)[i]); temp[count] = 0x00; // Was mit temp machen delete[] temp;
Du könntest auch jedes Zeichen einzeln in die Datei schreiben.
-
@Nemesyzz
temp[i] = static_cast<char> (static_cast<LPCTSTR> (str)[i]);
Nöö, wohl eher so:
temp[i] = static_cast<char>(static_cast<TCHAR>(str[i]));
-
Nein das war schon richtig.
Ich wollte nich den überladenen []-Operator von CString nehmen da er die Werte kopiert und nicht eine Referenz zurückgibt.
-
Ist nach ASM übersetzt sicherlich das gleiche, aber statt
temp[i] = static_cast<char>(static_cast<TCHAR>(str[i]));
kann man auch gleich
temp[i] = static_cast<char>(str[i]);
schreiben.
Hat aber eigentlich nix mit API zu tun, oder?
-
Tach auch,
also Eure Vorschläge funktionieren bei mir nicht:-(( Ich verzweifel langsam, desshalb hier der Code
So solls rauskommen:
In der Datei AUSLAGERN.TXT soll stehen "Mein Text" und "M e i n T e x t"void CXDlg::OnSave() { // TODO: Add your control notification handler code here CString str("Mein Text"); int count = str.GetLength(); char* temp = new char[count + 1]; for(int i = 0;i < count;++i) temp[i] = static_cast<char> (static_cast<LPCTSTR> (str)[i]); temp[count] = 0x00; //Filehandling hFile = CreateFile (TEXT("AUSLAGERN.TXT"), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0, NULL); do { if(ReadFile(hFile,buff,16384,&dwBytesRead,NULL)) { dwPos=SetFilePointer(hFile,0,NULL,FILE_END); WriteFile(hFile,"S<K>",4,&dwFileLen,NULL); WriteFile(hFile,str,20,&dwFileLen,NULL); WriteFile(hFile,"\r\n",2,&dwFileLen,NULL); } }while(dwBytesRead==16384); if (hFile == INVALID_HANDLE_VALUE) { // Your error-handling code goes here. AfxMessageBox(_T("Fehler beim Schreiben")); return; } else CloseHandle(hFile); delete[] temp; }
BITTE HELFT MIR!!!
edit:
Codetags hinzugefügt.[ Dieser Beitrag wurde am 21.11.2002 um 21:02 Uhr von cd9000 editiert. ]