资源简介

用c++的文件流加map结构实现,支持读取多个配置文件,用逗号作为注释 【】为里面写table名 table里面为key = value形式,可自行扩展功能

资源截图

代码片段和文件信息

#include
#include
#include
#include“LoadConfig.h“

LoadConfig::LoadConfig()
{
m_Config.clear();
}

LoadConfig::~LoadConfig()
{

}

int LoadConfig::LoadnewConfig(const char* filename)
{
fstream inFile(filename);
if (!inFile.is_open())
{
return ECR_FILE_OPENFAIL;
}
Confs::iterator itconf = m_Config.find(filename);
if (itconf != m_Config.end())
{
return ECR_OK;
}

Keys myKey;
m_Config.insert(Confs::value_type(filename myKey));
Keys& myKeyTmp = m_Config[filename];

int line_count = 0;
string inbuf subbuf;
string sValue = ““;
int nRet = 0;

while (!inFile.eof())
{
getline(inFile inbuf);
if (inbuf.length() > 0 && inbuf[0] == ‘;‘)
continue;
line_count++;
size_t last_pos = inbuf.find_last_of(“\r\n“);
if (last_pos != string::npos)
{
subbuf = inbuf.substr(0 last_pos);
}
else
{
subbuf = inbuf;
}

nRet = ParseLine(myKeyTmp sValue subbuf);
if (nRet)
{
return nRet;
}
}
return ECR_OK;
}

int LoadConfig::ParseLine(Keys& key string& value string Line)
{
size_t first = 0 last = 0;

Trim(Line “ \t\r\n“);

// 分析是否为注释行 以#为注释
first = Line.find_first_of(“#“);
if (first != (string::npos))
{
Line = Line.substr(0 first);
}

if (Line.empty())
{
return ECR_OK;
}

last = Line.rfind(‘]‘);
if (Line[0] == ‘[‘ && last != (string::npos))
{

//新的一节
value = Line.substr(1 last - 1);

transform(value.begin() value.end() value.begin() tolower);
Values empty;
key.insert(Keys::value_type(value empty));
return ECR_OK;
}
if (value.empty())
{
return ECR_PARSELINE_FAIL;
}
//配置一项
first = Line.find(‘=‘);
if (first == string::npos)
{
return ECR_PARSELINE_FAIL;
}

string name  = Line.substr(0 first);
string strvalue = Line.substr(first + 1 string::npos);

Trim(name “\t\r\n“);
Trim(strvalue “\t\r\n“);
transform(name.begin() name.end() name.begin() tolower);

if (name.empty())
{
return ECR_PARSELINE_FAIL;
}

Values& ValueTmp = key[value];
ValueTmp.insert(Values::value_type(name strvalue));
return ECR_OK;
}

string LoadConfig::Trim(string& line const char* trim)
{
size_t first = 0 last = 0;
first = line.find_first_not_of(trim);
last = line.find_last_not_of(trim);
if (first == string::npos || last == string::npos)
{
line = ““;
}
else
{
line = line.substr(first last - first + 1);
}

return line;
}

void LoadConfig::printfAllConf()
{
for (Confs::iterator confit = m_Config.begin(); confit != m_Config.end(); confit++)
{
printf(“file----------------------%s--------------------------\n\n“ confit->first.c_str());
for (Keys::iterator keyit = confit->second.begin(); keyit != confit->second.end(); keyit++)
{
printf(“key------------[%s]-------------\n“ keyit->first.c_str());
for (Values::iterator valueit = keyit->second.begin(); valueit != keyit->second.end(); valueit++)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-07-17 20:58  loadConfig\
     目录           0  2019-07-17 20:58  loadConfig\.vs\
     目录           0  2019-07-17 20:58  loadConfig\.vs\loadConfig\
     目录           0  2019-07-17 21:30  loadConfig\.vs\loadConfig\v15\
     文件       44032  2019-07-17 21:31  loadConfig\.vs\loadConfig\v15\.suo
     文件     6062080  2019-07-17 21:31  loadConfig\.vs\loadConfig\v15\Browse.VC.db
     目录           0  2019-07-17 20:59  loadConfig\.vs\loadConfig\v15\ipch\
     目录           0  2019-07-17 21:01  loadConfig\.vs\loadConfig\v15\ipch\AutoPCH\
     目录           0  2019-07-17 21:01  loadConfig\.vs\loadConfig\v15\ipch\AutoPCH\4e1f150a1da45b37\
     文件    35127296  2019-07-17 21:14  loadConfig\.vs\loadConfig\v15\ipch\AutoPCH\4e1f150a1da45b37\MAIN.ipch
     目录           0  2019-07-17 21:30  loadConfig\.vs\loadConfig\v15\ipch\AutoPCH\68434dcf41aaabe0\
     文件    39256064  2019-07-17 21:30  loadConfig\.vs\loadConfig\v15\ipch\AutoPCH\68434dcf41aaabe0\LOADCONFIG.ipch
     目录           0  2019-07-17 21:30  loadConfig\Debug\
     文件      353792  2019-07-17 21:29  loadConfig\Debug\loadConfig.exe
     文件     2590904  2019-07-17 21:29  loadConfig\Debug\loadConfig.ilk
     文件     5574656  2019-07-17 21:29  loadConfig\Debug\loadConfig.pdb
     文件          56  2018-08-24 20:57  loadConfig\Debug\text.ini
     文件          47  2019-07-17 21:28  loadConfig\Debug\text2.ini
     目录           0  2019-07-17 21:28  loadConfig\loadConfig\
     文件     8847360  2018-08-28 17:29  loadConfig\loadConfig.sdf
     文件         976  2018-08-24 16:38  loadConfig\loadConfig.sln
     文件       33792  2018-08-28 17:29  loadConfig\loadConfig.v12.suo
     目录           0  2019-07-17 21:29  loadConfig\loadConfig\Debug\
     文件         793  2018-08-27 12:21  loadConfig\loadConfig\Debug\loadConfig.Build.CppClean.log
     文件         113  2019-07-17 21:29  loadConfig\loadConfig\Debug\loadConfig.log
     文件     3267891  2019-07-17 21:29  loadConfig\loadConfig\Debug\LoadConfig.obj
     目录           0  2019-07-17 21:29  loadConfig\loadConfig\Debug\loadConfig.tlog\
     文件        2762  2019-07-17 21:29  loadConfig\loadConfig\Debug\loadConfig.tlog\cl.command.1.tlog
     文件       40362  2019-07-17 21:29  loadConfig\loadConfig\Debug\loadConfig.tlog\CL.read.1.tlog
     文件        2062  2019-07-17 21:29  loadConfig\loadConfig\Debug\loadConfig.tlog\CL.write.1.tlog
     文件        2648  2019-07-17 21:29  loadConfig\loadConfig\Debug\loadConfig.tlog\link.command.1.tlog
............此处省略17个文件信息

评论

共有 条评论