一 VC中操作INI文件函数
函数名 | 功能 | 备注 |
GetPrivateProfileInt | 读取INI文件指定块中的键名对应的整数值。 | |
GetPrivateProfileSection | 读取INI文件指定块中的所有键名及其对应值。 | |
GetPrivateProfileSectionNames | 读取一INI文件中所有的块名。 | |
GetPrivateProfileString | 读取INI文件指定块中的键名对应的字符串。 | |
GetPrivateProfileStruct | 读取INI文件指定块中的键名对应的数据 | |
GetProfileInt | 读取win.ini中指定块中的键名对应的整数值。 | |
GetProfileSection | 读取win.ini中指定块中所有的键名及其值。 | |
GetProfileString | 读取win.ini中指定块中的键名的对应值。 | |
WritePrivateProfileSection | 替换INI文件中指定块中所有键名对应的值。 | |
WritePrivateProfileString | 把给定的键名及其值写入到指定INI文件的相应块中。 | |
WritePrivateProfileStruct | 把指定的键名及其数据写入到指定INI文件的块中。 | |
WriteProfileSection | 替换win.ini中指定块的所有键名对应的值。 | |
WriteProfileString | 将给定的键名及值写入win.ini中对应的块中。 | |
二 使用案例
1)函数GetPrivateProfileSectionNames用于读取INI文件中所有快名
GetPrivateProfileSectionNames(SectionName, ALLSECTIONS, m_strPath.c_str());
2)函数GetPrivateProfileSection读取INI文件指定块中所有键名及其对应的值
GetPrivateProfileSection(SectionTemp.strfulName.c_str(), pstrSectionChiefKey, SECTIONLEN, m_strPath.c_str());
vector<string> vctTypeNameTemp;
vector<SECTION> vctAllSctTemp;
char SectionName[ALLSECTIONS];
memset(SectionName,0,ALLSECTIONS);
string strSectionName="";
GetPrivateProfileSectionNames(SectionName, ALLSECTIONS, m_strPath.c_str());
CharToString(strSectionName,SectionName,ALLSECTIONS);
char *pOneSectionName = &strSectionName[0];
int ii = strlen(pOneSectionName); //多于。。。
int iSectionNamechieflen = 0;
while(0 != *pOneSectionName)
{
int iOneSectionNamelen = strlen(pOneSectionName);
iSectionNamechieflen += iOneSectionNamelen +1;
string strOneSectionName = "";
strOneSectionName = pOneSectionName;
SECTION SectionTemp;
string strSlash = "\\";
int iSlash = strOneSectionName.find(strSlash);
if(-1 == iSlash)
{
SectionTemp.strpreName = strOneSectionName;
SectionTemp.strposName = "";
SectionTemp.strfulName = strOneSectionName;
vctTypeNameTemp.push_back(strOneSectionName); //要求配置文件对各种类型图片都有输出的类型说明
}
else
{
SectionTemp.strpreName = strOneSectionName.substr(0,iSlash);
SectionTemp.strposName = strOneSectionName.substr(iSlash+1);
SectionTemp.strfulName = strOneSectionName;
}
char pstrSectionChiefKey[SECTIONLEN];
memset(pstrSectionChiefKey,0,SECTIONLEN);
GetPrivateProfileSection(SectionTemp.strfulName.c_str(), pstrSectionChiefKey, SECTIONLEN, m_strPath.c_str());
string strSectionChiefKey = "";
CharToString(strSectionChiefKey, pstrSectionChiefKey, SECTIONLEN);
char* pKey= &strSectionChiefKey[0];
int iallkeylen = 0;
bool bconfig = false;
bool bSect = true;
while(0 != *pKey)
{
SECTIONKEY Sectionskey;
int ikeylen = strlen(pKey);
iallkeylen += ikeylen + 1;
string strequal = "=";
string strKey = "";
strKey = pKey;
int iequal = strKey.find(strequal);
if(-1 == iequal)
{
pOneSectionName = &strSectionName[iSectionNamechieflen];
bSect = false;
break;
}
Sectionskey.strKeyName = strKey.substr(0,iequal);
Sectionskey.strKeyValue = strKey.substr(iequal + 1);
Sectionskey.strKey = strKey;
pKey = &strSectionChiefKey[iallkeylen];
SectionTemp.vctSectKey.push_back(Sectionskey);
if(ORDER == Sectionskey.strKeyName) //设置行值
{
SectionTemp.iLineNumber = atoi(Sectionskey.strKeyValue.c_str());
}
if(UPOSITION == Sectionskey.strKeyName)
{
EREGION regionTemp;
if(!GetRegion(Sectionskey.strKeyValue, regionTemp)) //判断是否为配置信息
{
pOneSectionName = &strSectionName[iSectionNamechieflen];
bSect = false;
break;
}
SectionTemp.RegNumber = regionTemp;
bconfig = true;
}
}
if(false == bSect)
{
continue;
}
if(false == bconfig && SectionTemp.strposName.empty())
{
SectionTemp.RegNumber = EREGION::Config;
}
pOneSectionName = &strSectionName[iSectionNamechieflen];
vctAllSctTemp.push_back(SectionTemp);
}
ClassifySortSection(mapAllSct, vctTypeNameTemp, vctAllSctTemp);
vctAllSctTemp.clear();
vctTypeNameTemp.clear();