资源简介
用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\li
............此处省略17个文件信息
- 上一篇:MFC停车场管理系统项目
- 下一篇:C++实现五子棋项目.zip
相关资源
- C++实现五子棋项目.zip
- VC++视频采集资料
- Effective C++中文版第三版带书签
- 基于SVM与人工神经网络的车牌识别O
- 数据结构、算法与应用——C++语言描
- C++17 标准 ISOIEC 14882 2017 官方pdf文档
- 人脸识别C++源码
- Visual C++ MFC 源代码大全
- C++程序设计第二版钱能.rar
- Visual C++ Redistributable for Visual Studio 2
- 车牌识别系统C++实现
- 数据结构与算法分析C++描述第三版及
- 顾卫刚手把手教你学DSP基于2812
- WAV转换成MP3音频文件 C++ vc MFC
- Learning C++ by Creating Games with UE4 无水印
- 《C++游戏开发》笔记十二 战争迷雾的
- 《MFC游戏开发》笔记九 碰撞检测 怪物
- C++ GUI Qt 4编程第二版 经典教材适合
- 图书管理系统c++与SQL数据库+课程设计
- Scientific and Engineering C++
- VC++游戏编程基础有书签
- 钱能C++程序设计教程第二版pdf高清带
- C++并发编程实战 美威廉姆斯著 高清扫
- 源代码——MFC的WebBrowser控件 C++与ja
- C++编程风格(PDF 英汉对照 The Element
- 精通Visual C++数字图像处理典型算法及
- vc++企业员工考勤系统源码
- MFC c++ 实现简易电话簿
- 钱能C++程序设计教程第二版&高清版
- VC++图像处理程序设计
评论
共有 条评论