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);
}

posted @ 2012-08-30 11:40  马儿快跑  阅读(2673)  评论(0编辑  收藏  举报