在程序运行的时候通常要记录一些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;  
  • }  
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()