在程序运行的时候通常要记录一些log文件,通常使用的方法是把程序运行信息输出到txt文本。
因为WinCE中使用的是Unicode,普通的windows,ANSI txt文本编写方法在WinCE中使用不了。
在WinCE之中,默认使用Unicode双字节编码而非传统系统的ANSI单字节,
因此在编写txt文本的时候,需要进行一些设置,才能无乱码的查看。
呵呵,说白了就是要写Unicode编码的TXT文本。
Unicode编码文本与ANSI编码文本的区别是:Unicode文本的前面两个字节内容是FF FE.
因此在WinCE创建文本的时候需要先写两个字节的内容FF FE,说明该文本是Unicode的。
然后在调用WriteFile的时候也需要注意一个地方,就是要写入字符串的长度。
由于Unicode是双字节的,而WriteFile是按字节计算的,因此写入的字符串要乘以2.
由于Windows是低字节在前,高字节在后的,因此如果设置Unicode标记则为
WORD wUnicodeFlag = 0xFEFF;
- BOOL WriteToFile(LPCTSTR lpData)
- {
- BOOL bResult = FALSE;
- HANDLE hFile;
- DWORD dwByteWrite;
- TCHAR szBuf[256];
- hFile = CreateFile(TEXT("//RegRecord.txt"),
- GENERIC_READ | GENERIC_WRITE,
- 0, // Share mode
- NULL, // lpSecurityAttribute
- OPEN_ALWAYS, // Create disposition
- FILE_ATTRIBUTE_NORMAL,
- NULL);
- if (hFile == INVALID_HANDLE_VALUE)
- {
- StringCchPrintf(szBuf, 256, TEXT("WriteFile:%d"), GetLastError());
- MessageBox(NULL, szBuf, TEXT("Error"), MB_ICONERROR);
- return bResult;
- }
- // Write the unicode flag
- if (GetLastError() != ERROR_ALREADY_EXISTS)
- {
- WORD wUnicodeFlag;
- wUnicodeFlag = 0xFEFF;
- if (!WriteFile(hFile, &wUnicodeFlag, sizeof(WORD), &dwByteWrite, NULL))
- {
- StringCchPrintf(szBuf, 256, TEXT("WriteFile:%d"), GetLastError());
- MessageBox(NULL, szBuf, TEXT("Error"), MB_ICONERROR);
- }
- }
- SetFilePointer(hFile, 0, NULL, FILE_END);
- if (!WriteFile(hFile,
- lpData,
- _tcslen(lpData)*sizeof(TCHAR), // bytes wait to write.
- &dwByteWrite,
- NULL))
- {
- StringCchPrintf(szBuf, 256, TEXT("WriteFile:%d"), GetLastError());
- MessageBox(NULL, szBuf, TEXT("Error"), MB_ICONERROR);
- }
- else
- {
- bResult = TRUE;
- }
- CloseHandle(hFile);
- return bResult;
- }
全站熱搜
留言列表