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