EVC 操作ini类

linuxchenyy 2007-10-15 10:39:47
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<dwLength)
{
string[i]=pszWideChar[i];
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;
}

...全文
100 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧