Zum Inhalt springen

win ce: probleme beim schreiben einer datei...


TinTin

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...