在程式啟動並執行時候通常要記錄一些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;
BOOLWriteToFile(LPCTSTR lpData)<br />{<br />BOOL bResult = FALSE;<br />HANDLE hFile;<br />DWORD dwByteWrite;<br />TCHAR szBuf[256];</p><p>hFile = CreateFile(TEXT("//RegRecord.txt"),<br />GENERIC_READ | GENERIC_WRITE,<br />0,// Share mode<br />NULL,// lpSecurityAttribute<br />OPEN_ALWAYS,// Create disposition<br />FILE_ATTRIBUTE_NORMAL,<br />NULL);<br />if (hFile == INVALID_HANDLE_VALUE)<br />{<br />StringCchPrintf(szBuf, 256, TEXT("WriteFile:%d"), GetLastError());<br />MessageBox(NULL, szBuf, TEXT("Error"), MB_ICONERROR);<br />return bResult;<br />}<br />// Write the unicode flag<br />if (GetLastError() != ERROR_ALREADY_EXISTS)<br />{<br />WORD wUnicodeFlag;<br />wUnicodeFlag = 0xFEFF;<br />if (!WriteFile(hFile, &wUnicodeFlag, sizeof(WORD), &dwByteWrite, NULL))<br />{<br />StringCchPrintf(szBuf, 256, TEXT("WriteFile:%d"), GetLastError());<br />MessageBox(NULL, szBuf, TEXT("Error"), MB_ICONERROR);<br />}<br />}<br />SetFilePointer(hFile, 0, NULL, FILE_END);</p><p>if (!WriteFile(hFile,<br />lpData,<br />_tcslen(lpData)*sizeof(TCHAR),// bytes wait to write.<br />&dwByteWrite,<br />NULL))<br />{<br />StringCchPrintf(szBuf, 256, TEXT("WriteFile:%d"), GetLastError());<br />MessageBox(NULL, szBuf, TEXT("Error"), MB_ICONERROR);<br />}<br />else<br />{<br />bResult = TRUE;<br />}</p><p>CloseHandle(hFile);<br />return bResult;<br />}