TinTin Geschrieben 26. Juli 2002 Geschrieben 26. Juli 2002 Hi, ich hab für win ce ein kleines programm geschrieben, hab aber dabei folgendes problem: das schreiben auf dem pda scheint problemlos zu funktionieren, schaue ich mir die dateien aber auf dem pc an, so ist nach jedem zeichen ein null character eingefügt. ich hab verschiedenste möglichkeiten des schreibens ausprobiert und bei allen tritt der selbe fehler auf. ich programmiere mit embedded visual c++ 3.0. hat jemand ne idee worann es liegen könnte. hier die funktionen die ich zum schreiben verwendet habe: void OnDatenSchreiben_1(int iWie) { CString str; str ="1:Test Schreiben in 1 mit CString"; if (CFile Datei(_T("\\W_R\\0001.Txt"),CFile::modeCreate | CFile::modeWrite | CFile::typeText)) { Datei.Write(str,str.GetLength()); Datei.Close(); } else AfxMessageBox(_T(" Fehler beim Schreib 1")); } void OnDatenSchreiben_2(int iWie) { CString str; CStdioFile File; str ="2:Test Schreiben in 2 mit CString"; if (File.Open(_T("\\W_R\\0002.Txt"),CFile::modeCreate | CFile::modeWrite)) { File.Write(str,str.GetLength()); File.Close(); } else AfxMessageBox(_T(" Fehler beim Schreib 2")); } void OnDatenSchreiben_3(int iWie) { CString str1="Inhalt String1 ", str2="Inhalt String2", str; str ="\\W_R\\0003.txt"; CFile myFile(str, CFile::modeCreate | CFile::modeReadWrite); // Create a storing archive. CArchive arStore(&myFile, CArchive::store); // Write str1 and str2 to the archive. arStore.WriteString( str1 ); // arStore.WriteString( "\n" ); arStore.WriteString( str2 ); arStore.Close(); // Close the storing archive. /* // Create a loading archive. myFile.SeekToBegin(); CArchive arLoad(&myFile, CArchive::load); // Verify the two strings are in the archive. arLoad.ReadString( str ); ASSERT( str == str1 ); arLoad.ReadString( str ); ASSERT( str == str2 ); */ } void OnDatenSchreiben_4(int iWie) { CString str1; str1="Inhalt String 1 "; TCHAR NAME[] =_T("\\W_R\\0004.TXT"); HANDLE hLogFile; DWORD dwWritten; AfxMessageBox(NAME); // hLogFile = CreateFile(str, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, // OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); hLogFile = CreateFile(NAME, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hLogFile != INVALID_HANDLE_VALUE) { // ReadFile(hLogFile, pszFileBuffer, iFileSize, &dwBytesRead, NULL); WriteFile(hLogFile, str1, str1.GetLength(), &dwWritten, NULL); CloseHandle(hLogFile); } else AfxMessageBox(_T(" Fehler beim Creat 4 ")); } void OnDatenSchreiben_5(int iWie) { TCHAR NAME[] =_T("\\W_R\\0005.TXT"); HANDLE hFile = CreateFile(NAME, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) AfxMessageBox(_T("Could not create the file!")); else { CFile myFile((UINT) hFile); static const TCHAR sz[] = _T("Hockey is best!"); myFile.Write(sz, lstrlen(sz)); myFile.Close(); } } wenn ich mir die geschriebenen dateien mit hexeditor anschaue ist jedes 2te zeichen HEX 00. I n h a l t S t r i n g 1 I n h a l t S t r i n g 2 ich echt keine ahnung mehr woran das liegen könnte. mit der bitte um hilfe TinTin Zitieren
Klotzkopp Geschrieben 27. Juli 2002 Geschrieben 27. Juli 2002 Original geschrieben von TinTin das schreiben auf dem pda scheint problemlos zu funktionieren, schaue ich mir die dateien aber auf dem pc an, so ist nach jedem zeichen ein null character eingefügt. ich hab verschiedenste möglichkeiten des schreibens ausprobiert und bei allen tritt der selbe fehler auf. Das ist kein Fehler Windows CE ist grundsätzlich Unicode, d.h. jedes Zeichen hat 16 Bit. Bei der Unicode-Darstellung der normalen ANSI-Zeichen ist das High-Byte immer Null, daher sieht es so aus, als ob Deine Datei "Lücken" hat. Unter CE ist ein TCHAR immer ein wchar_t, und damit sind auch alle Klassen und Methoden, die auf TCHAR aufbauen (z.B. CString) Unicode. Es gibt zwei Möglichkeiten: Wenn Du willst, dass gewöhnliche Windows-Programme (wie z.B. Notepad) die Datei als Unicode erkennen, dann schreibe als erstes Zeichen ein 0xFEFF rein (bzw. 0xFF und 0xFE als einzelne Bytes - wir sind ja Little Endian). Wenn Du eine ANSI-Datei erstellen willst, dann solltest Du Dich mit den diversen Konvertierungsfunktionen beschäftigen. USES_CONVERSION und Konsorten können mit den üblichen Einschränkungen verwendet werden. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.