设计INI配置文件分析器(C++)

标准的INI配置文件的格式为:[节名1]ValueName1=helloValueName2=1000[节名2]ValueName1=youValueName2=100,... 标准的INI配置文件的格式为:[节名1]ValueName1= helloValueName2= 1000[节名2]ValueName1=youValueName2= 100,500ValueName3=0ValueName4=6[节名3]ValueName1= jack………………设计一个文本分析器类CINIReader,可以打开配置文件,给定节名和项目名就可以得到具体值及修改具体值,也可以根据节名 添加和删除节,最后可以把分析器的内容保存为文件。如上INI文件中,如果设计测试主函数后可如下所示:CINIReader reader;string svalue;reader.Open(“example.ini”); //打开文件svalue=reader.Get(“节名1”,”ValueName1”);//返回字符串 “hello”reader.Set(“节名1”,”ValueName2”,”2000”);//修改项目值为”2000”reader.Add (“节名1”,”ValueName3”,”600”);//在此节中添加一行新值reader.Save(); //可以把修改后结果保存下来……… 有急用。。初学C++这门课。。。完全不知所措。。希望高手帮忙。。不胜感激。。如能提供全部程序最好。。 展开
 我来答
匿名用户
2013-08-08
展开全部
#include <iostream>
#include <windows.h>class IniFile
{
public:
IniFile(const char* file); /* 读 */
bool GetString(const char* section, const char* key, std::string *value);
bool GetString(const char* section, const char* key, char const **value);
std::string GetStringDefault(const char *section, const char* key, const char* def); bool GetBool(const char *section, const char *key);
bool GetBoolDefault(const char *section, const char* key, const bool def = false); int GetIntDefault(const char *section, const char *key, const int def); bool GetFloat(const char *section, const char *key, float *value);
float GetFloatDefault(const char *section, const char *key, const float def); /* 写 */
bool SetSection(const char *section, const char* newName);
bool SetString(const char *section, const char *key, const char *value);
bool SetInt(const char *section, const char *key, int value);
bool SetFloat(const char *section, const char *key, float value);
private:
std::string m_file;
};/**
* constructor
* @param file 源文件(.ini)
*/
IniFile::IniFile(const char* file) : m_file(file)
{
}/**
* 获取字符串 采用 string
* @return false 获取失败, true 成功
*/
bool IniFile::GetString(const char* section, const char *key, std::string *value)
{
char buffer[256];
if(!GetPrivateProfileString(section, key, NULL, buffer, 256, m_file.c_str()))
return false; *value = strdup(buffer);
return true;
}/**
* 获取字符串 采用 char*
* @return false 获取失败, true 成功
*/
bool IniFile::GetString(const char *section, const char *key, char const **value)
{
char buffer[2566];
if(!GetPrivateProfileString(section, key, NULL, buffer, 256, m_file.c_str()))
return false; *value = strdup(buffer);
return true;
}/**
* 获取字符串
* @param def 默认值
* @return 获取到的或默认的字符串
*/
std::string IniFile::GetStringDefault(const char *section, const char* key, const char* def)
{
char buffer[256];
GetPrivateProfileString(section, key, def, buffer, 256, m_file.c_str());
return std::string(buffer);
}/**
* 获取bool值
* @return false 获取失败, true成功
*/
bool IniFile::GetBool(const char *section, const char *key)
{
return GetPrivateProfileInt(section, key, NULL, m_file.c_str()) ? true : false;
}/**
* 获取bool值
* @param def 默认值
* @return 获取到的值
*/
bool IniFile::GetBoolDefault(const char *section, const char* key, const bool def)
{
INT _def = def ? 1 : 0;
return GetPrivateProfileInt(section, key, _def, m_file.c_str()) ? true : false;
}/**
* 获取int值
* @param def 默认值
* @return 获取到的值
*/
int IniFile::GetIntDefault(const char *section, const char *key, const int def)
{
return GetPrivateProfileInt(section, key, def, m_file.c_str());
}/**
* 获取float值
*/
bool IniFile::GetFloat(const char *section, const char *key, float *value)
{
char buffer[256];
if(!GetPrivateProfileString(section, key, NULL, buffer, 256, m_file.c_str()))
return false; *value = (float)atof(buffer);
return true;
}/**
* 获取float值
* @param def 默认值
*/
float IniFile::GetFloatDefault(const char *section, const char *key, const float def)
{
char buffer[10];
char _def[10];
sprintf(_def, "%f", def);
GetPrivateProfileString(section, key, _def, buffer, 256, m_file.c_str()); return (float)atof(buffer);
}/**
* 修改section
* @newName 新的名称
* @return true修改成功,false修改失败
*/
bool IniFile::SetSection(const char *section, const char *newName)
{
return WritePrivateProfileSection(section, newName, m_file.c_str()) ? true : false;
}/**
* 设置字符串值
* @return true 设置成功, false 失败
*/
bool IniFile::SetString(const char *section, const char *key, const char *value)
{
return WritePrivateProfileString(section, key, value, m_file.c_str()) == TRUE ? true : false;
}/**
* 设置int值
* @return true 设置成功, false 失败
*/
bool IniFile::SetInt(const char *section, const char *key, int value)
{
char buf[10];
sprintf(buf, "%d", value);
return WritePrivateProfileString(section, key, buf, m_file.c_str()) == TRUE ? true : false;
}/**
* 设置float值
* @return true 设置成功, false 失败
*/
bool IniFile::SetFloat(const char *section, const char *key, float value)
{
char buf[10];
sprintf(buf, "%f", value);
return WritePrivateProfileString(section, key, buf, m_file.c_str()) == TRUE ? true : false;
}int main()
{
IniFile iniFile("E:\\MyTools\\C++\\Exercise\\Debug\\Test.ini");
printf("节名1:Name1:%s Name2:%d\n",
iniFile.GetStringDefault("Section1", "ValueName1", "无").c_str(),
iniFile.GetIntDefault("Section1", "ValueName2", -1));
return 0;
}/**
INI文件内容如下:[Section1]
ValueName1="hello"
ValueName2=1000
*/
名片
2024-10-28 广告
Altair HyperWorks是一套功能强大的集成化CAE(计算机辅助工程)软件平台,由Altair公司开发。它涵盖了结构分析、流体动力学、优化、多体动力学、电磁场仿真等多个领域,提供了丰富的仿真工具和优化算法。HyperWorks以其... 点击进入详情页
本回答由名片提供
匿名用户
2013-08-08
展开全部
这就是设计INI配置文件分析器c++代码么?有些不明白。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式