//if (0 == iResult)//旧
//{
// strResult = _T("旧版本");
//}
//else if(1 == iResult)//新
//{
// strResult = _T("新版本");
//}
//else if (10 == iResult)
//{
// strResult = _T("版本相同");
// //用作异常处理或者其他用途,暂时不启用
//}
int CVersionCompareDlg::CompareVersion(CString strNewVersion, CString strOldVersion)
{
int iResult = -1;
if (strNewVersion.IsEmpty() || strOldVersion.IsEmpty())//版本数据异常
{
return iResult;
}
int iNewStartIndex = 0, iNewEndIndex = 0;//新版本的开始、结束序号
int iOldStartIndex = 0, iOldEndIndex = 0;//旧版本的开始、结束序号
int iNewVersion = 0, iOldVersion = 0;//新、旧子版本
CString strNewSubVersion, strOldSubVersion;//新、旧子版本
char *szVersion = NULL;
do
{
iNewEndIndex = strNewVersion.Find('.', iNewStartIndex);
iOldEndIndex = strOldVersion.Find('.', iOldStartIndex);
strNewSubVersion.Empty();//清空子版本
strOldSubVersion.Empty();//清空子版本
iNewVersion = 0;
iOldVersion = 0;
//新版本处理 开始
if (-1 == iNewEndIndex)//没有找到点号
{
//取剩下的全部字符
strNewSubVersion = strNewVersion.Mid(iNewStartIndex);
//设置开始位置
iNewStartIndex = strNewVersion.GetLength();
}
else//找到了点号
{
//取区段字符
strNewSubVersion = strNewVersion.Mid(iNewStartIndex, iNewEndIndex - iNewStartIndex);
//设置开始位置
iNewStartIndex = iNewEndIndex + 1;
}
if (!strNewSubVersion.IsEmpty())//找到字符则计算版本号
{
iNewVersion = GetVersionInt(&strNewSubVersion);
}
else//没有找到字符版本置0
{
iNewVersion = 0;
}
//新版本处理 结束
//旧版本处理 开始
if (-1 == iOldEndIndex)//没有找到点号
{
//取剩下的全部字符
strOldSubVersion = strOldVersion.Mid(iOldStartIndex);
//设置开始位置
iOldStartIndex = strOldVersion.GetLength();
}
else//找到了点号
{
//取区段字符
strOldSubVersion = strOldVersion.Mid(iOldStartIndex, iOldEndIndex - iOldStartIndex);
//设置开始位置
iOldStartIndex = iOldEndIndex + 1;
}
if (!strOldSubVersion.IsEmpty())//找到字符则计算版本号(没有找到的情况下已经置0)
{
iOldVersion = GetVersionInt(&strOldSubVersion);
}
else//没有找到字符版本置0
{
iOldVersion = 0;
}
//旧版本处理 结束
//比较版本 开始
if (iNewVersion > iOldVersion)
{
return 1;
}
else if (iNewVersion < iOldVersion)
{
return 0;
}
//比较版本 结束
} while (!(iNewEndIndex == -1 && iOldEndIndex == -1));
iResult = 10;
return iResult;
}
// 删除字符串中开始部分的0
int CVersionCompareDlg::GetVersionInt(CString *pstrSource)
{
int iSourceLength = pstrSource->GetLength();
int iVersion = 0;
int iTemp = 0;
TCHAR chTemp[2];
for (int i = 0; i < iSourceLength; i ++)
{
if ('0' != pstrSource->GetAt(i))
{
chTemp[0] = pstrSource->GetAt(i);
iTemp = atoi((char *)chTemp);
if (0 != iTemp)
{
for(int iMi = 0; iMi < iSourceLength - i - 1; iMi ++)
{
iTemp = iTemp * 10;
}
}
iVersion += iTemp;
}
}
return iVersion;
}
//{
// strResult = _T("旧版本");
//}
//else if(1 == iResult)//新
//{
// strResult = _T("新版本");
//}
//else if (10 == iResult)
//{
// strResult = _T("版本相同");
// //用作异常处理或者其他用途,暂时不启用
//}
int CVersionCompareDlg::CompareVersion(CString strNewVersion, CString strOldVersion)
{
int iResult = -1;
if (strNewVersion.IsEmpty() || strOldVersion.IsEmpty())//版本数据异常
{
return iResult;
}
int iNewStartIndex = 0, iNewEndIndex = 0;//新版本的开始、结束序号
int iOldStartIndex = 0, iOldEndIndex = 0;//旧版本的开始、结束序号
int iNewVersion = 0, iOldVersion = 0;//新、旧子版本
CString strNewSubVersion, strOldSubVersion;//新、旧子版本
char *szVersion = NULL;
do
{
iNewEndIndex = strNewVersion.Find('.', iNewStartIndex);
iOldEndIndex = strOldVersion.Find('.', iOldStartIndex);
strNewSubVersion.Empty();//清空子版本
strOldSubVersion.Empty();//清空子版本
iNewVersion = 0;
iOldVersion = 0;
//新版本处理 开始
if (-1 == iNewEndIndex)//没有找到点号
{
//取剩下的全部字符
strNewSubVersion = strNewVersion.Mid(iNewStartIndex);
//设置开始位置
iNewStartIndex = strNewVersion.GetLength();
}
else//找到了点号
{
//取区段字符
strNewSubVersion = strNewVersion.Mid(iNewStartIndex, iNewEndIndex - iNewStartIndex);
//设置开始位置
iNewStartIndex = iNewEndIndex + 1;
}
if (!strNewSubVersion.IsEmpty())//找到字符则计算版本号
{
iNewVersion = GetVersionInt(&strNewSubVersion);
}
else//没有找到字符版本置0
{
iNewVersion = 0;
}
//新版本处理 结束
//旧版本处理 开始
if (-1 == iOldEndIndex)//没有找到点号
{
//取剩下的全部字符
strOldSubVersion = strOldVersion.Mid(iOldStartIndex);
//设置开始位置
iOldStartIndex = strOldVersion.GetLength();
}
else//找到了点号
{
//取区段字符
strOldSubVersion = strOldVersion.Mid(iOldStartIndex, iOldEndIndex - iOldStartIndex);
//设置开始位置
iOldStartIndex = iOldEndIndex + 1;
}
if (!strOldSubVersion.IsEmpty())//找到字符则计算版本号(没有找到的情况下已经置0)
{
iOldVersion = GetVersionInt(&strOldSubVersion);
}
else//没有找到字符版本置0
{
iOldVersion = 0;
}
//旧版本处理 结束
//比较版本 开始
if (iNewVersion > iOldVersion)
{
return 1;
}
else if (iNewVersion < iOldVersion)
{
return 0;
}
//比较版本 结束
} while (!(iNewEndIndex == -1 && iOldEndIndex == -1));
iResult = 10;
return iResult;
}
// 删除字符串中开始部分的0
int CVersionCompareDlg::GetVersionInt(CString *pstrSource)
{
int iSourceLength = pstrSource->GetLength();
int iVersion = 0;
int iTemp = 0;
TCHAR chTemp[2];
for (int i = 0; i < iSourceLength; i ++)
{
if ('0' != pstrSource->GetAt(i))
{
chTemp[0] = pstrSource->GetAt(i);
iTemp = atoi((char *)chTemp);
if (0 != iTemp)
{
for(int iMi = 0; iMi < iSourceLength - i - 1; iMi ++)
{
iTemp = iTemp * 10;
}
}
iVersion += iTemp;
}
}
return iVersion;
}