在写ini时,我们时常需要将一个ini文件写成Unicode的,此时的做法是在文件头前面写一个Unicode的标志量即可。
在下面代码中就可以写入一个Unicode的文件 FILE *fp; fp = _tfopen(_T("e:\\sss.ini"), _T("r")); if (fp == NULL) { fp=_tfopen(_T("e:\\sss.ini"), _T("w+b")); wchar_t m_strUnicode[1]; m_strUnicode[0] = wchar_t(0XFEFF); fputwc(*m_strUnicode,fp); } fclose(fp); WritePrivateProfileString(_T("test"), _T("test"), _T("哈哈,这次写的是一个unicode文件了"), _T("e:\\sss.ini")); CString str; GetPrivateProfileString(_T("test"), _T("test"), _T(""),str.GetBuffer(512), 512, _T("e:\\sss.ini"));一般的情况下,我们可以封装一个函数,如下:
BOOL Unicode_WritePrivateProfileString( LPCTSTR lpAppName, // section name LPCTSTR lpKeyName, // key name LPCTSTR lpString, // string to add LPCTSTR lpFileName // initialization file ){ FILE *fp; fp = _tfopen(lpFileName, _T("r")); if (fp == NULL) { fp=_tfopen(lpFileName, _T("w+b"));wchar_t m_strUnicode[1];
m_strUnicode[0] = wchar_t(0XFEFF); fputwc(*m_strUnicode,fp); } fclose(fp);return ::WritePrivateProfileString(lpAppName, lpKeyName, lpString, lpFileName);
}这样就可以使用了。
在MFC中,也可以用类似的代码完成同样的功能,如下:
SetFileAttributes(inifile.c_str(), FILE_ATTRIBUTE_NORMAL);
//HANDLE hFile = CreateFile(inifile.c_str(),GENERIC_READ | GENERIC_WRITE,0,NULL,CREATE_ALWAYS|TRUNCATE_EXISTING,FILE_ATTRIBUTE_NORMAL ,NULL);/*! CREATE_ALWAYS参数在存在这个文件时,会把这个文件给清空并打开,否则会创建一个文件,zzy */HANDLE hFile = CreateFile(inifile.c_str(),GENERIC_READ | GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL ,NULL);if (INVALID_HANDLE_VALUE != hFile){ /*! 将ini文件写成Unicode文件,zzy,11月20日 */ wchar_t charUnicode = 0XFEFF; DWORD dwWrite = 0; WriteFile(hFile, &charUnicode, sizeof(charUnicode), &dwWrite, NULL); CloseHandle(hFile);}