Unicode的ini文件(C++)
在写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);
}