2817|0

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

EVC 操作ini类 [复制链接]

DWORD CClockToolDlg::GetPrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName)
{
CFile iniFile;
PBYTE pFileBuf;
CString szBuf;
DWORD dwLength;

if (lpFileName == NULL || lpReturnedString == NULL)
{  
  return 0;
}
*lpReturnedString = TCHAR('\0');
nSize = 0;
//打开文件不成问题
if(!iniFile.Open(lpFileName, CFile::modeRead))
{
  return 0;
}
dwLength = iniFile.GetLength();

if (dwLength == 0)
{
  return 0;
}
pFileBuf = new BYTE[dwLength + 2];
if (pFileBuf == NULL)
{
  return 0;
}
//初始化新分配的内存,设定初始值为0
memset(pFileBuf, 0x0, dwLength + 2);
iniFile.Read((void *)pFileBuf, dwLength);

iniFile.Close();
if (pFileBuf[0] == 0xFF && pFileBuf[1] == 0xFE)
{
  szBuf = (LPCWSTR)(pFileBuf + 2);
}
else
{
  PTCHAR pszWideChar = new TCHAR[dwLength + 1];
  MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS|MB_COMPOSITE|MB_USEGLYPHCHARS, (LPCSTR )pFileBuf, dwLength, pszWideChar,dwLength);

  //以下为我修改过的地方。因为我一点一点测试这个别人写的函数程序的时候,发现这里出了问题。于是我进行了修改,不过我认为我的修改并不好
  char string[500];
  int i=0;
  while(i   {
   string=pszWideChar;
   i++;
  }
  szBuf.Format(_T("%s"),string);
  //////////////

  delete pszWideChar;
}
delete pFileBuf;
while (1)
{
  CString szTemp;
  int nPos;
  if (szBuf.IsEmpty())
   goto _GetPrivateProfileString_EXIT;
  nPos = szBuf.FindOneOf(TEXT("\r\n"));

  if (nPos == -1)
  {
   szTemp = szBuf;
   szBuf.Empty();
   //szTemp='['
   //::AfxMessageBox(szTemp);
  }
  else
  {
   szTemp = szBuf.Left(nPos);
   szBuf = szBuf.Right(szBuf.GetLength() - nPos);
   szBuf.TrimLeft(TEXT("\r\n"));
  }
  szTemp.TrimLeft(TEXT("\t "));
  szTemp.TrimRight(TEXT("\t "));

  if (szTemp.GetAt(0) == TEXT('[') && szTemp.GetAt(szTemp.GetLength() - 1) == TEXT(']'))
  {
   szTemp = szTemp.Right(szTemp.GetLength() - 1);
   szTemp = szTemp.Left(szTemp.GetLength() - 1);
   如果没有[]
   if (lpAppName == NULL)
   {
    memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp,(szTemp.GetLength() + 1)* sizeof(TCHAR));
    nSize += szTemp.GetLength() + 1;
   }
   //如果有[]
   else if(szTemp.Compare(lpAppName) == 0)
   {
    while (1)
    {
     if (szBuf.IsEmpty())
     {
      ///////////这里是我用来实现lpDefault功能的一个全局变量,呵呵
      hubo=1;
      ///////////

      goto _GetPrivateProfileString_EXIT;
     }
     nPos = szBuf.FindOneOf(TEXT("\r\n"));
     if (nPos == -1)
     {
      szTemp = szBuf;
      szBuf.Empty();
     }
     else
     {
      szTemp = szBuf.Left(nPos);
      szBuf = szBuf.Right(szBuf.GetLength() - nPos);
      szBuf.TrimLeft(TEXT("\r\n"));
     }
     nPos = szTemp.Find(TEXT("="));
     if (nPos == -1)
      goto _GetPrivateProfileString_EXIT;
     CString szTemp1;
     szTemp1 = szTemp.Left(nPos);
     szTemp1.TrimLeft(TEXT("\t "));
     szTemp1.TrimRight(TEXT("\t "));
     if (lpKeyName == NULL)
     {
      memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp1,(szTemp1.GetLength() + 1)* sizeof(TCHAR));
      nSize += szTemp1.GetLength() + 1;
     }
     else if (szTemp1.Compare(lpKeyName) == 0)
     {
      szTemp1 = szTemp.Right(szTemp.GetLength() - nPos - 1);
      szTemp1.TrimLeft(TEXT("\t "));
      szTemp1.TrimRight(TEXT("\t "));
      memcpy(lpReturnedString + nSize, (LPCTSTR)szTemp1,(szTemp1.GetLength() + 1)* sizeof(TCHAR));
      nSize += szTemp1.GetLength() + 1;
      goto _GetPrivateProfileString_EXIT;
     }

///////////////////////////////////

    esle if(szTemp1.Compare(lpKeyName) != 0)

{

     hubo=1;

goto _GetPrivateProfileString_EXIT;

}

//////////////////////////////////
    }
   }
  }
}
_GetPrivateProfileString_EXIT:
lpReturnedString[nSize] = TEXT('\0');
return nSize;
}

点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表