背景:编程过程中经常会遇到读取Ini文件的场合,封装一个方便的类,能否避免重复编写,以后可复用。ini文件的格式很简单,并且不像xml之类的配置文件严谨。通常用于配置简单的键值对。
本类测试文件如下:<server.ini>
- #what
- [server1]
- ip= 192.168.1.1
- port=8888
- type=ai
- #no
- [server2]
- ip=10.10.10.10
- port=5002
- type=move
- #shit
- [server3]
- ip=127.0.0.1
- port=9527
- type=cache
- /*********************头文件 inifile.h *********************************/
- <pre name="code" class="cpp">#ifndef _INI_FILE_
- #define _INI_FILE_
- #include <string>
- #include <map>
- #include <iostream>
- using namespace std;
- #define MAX_LINE_BUF_SIZE 80
- #define MAX_SECTION_CONTEXT_BUF_SIZE 40
- #define MAX_KEY_SIZE 40
- #define MAX_VALUE_SIZE 40
- class IniFile
- {
- typedef std::map< string, string > MapKeyValue;
- typedef map< string, MapKeyValue > MapSection;
- public:
- IniFile();
- ~IniFile();
- bool Init(char* szFileName);
- void Save();
- bool SaveAs(char* szFileName);
- void ShowFileContext();
- string GetValue(const string& strKey);
- string GetValueFromSection(const string& strSection, const string& strKey);
- int GetInt(const string& strKey);
- float GetFloat(const string& strKey);
- private:
- void DelInvalidSign(char* szOldLine, char* szNewLine);
- bool IsNoteLine(char* szLine);
- bool IsEmptyLine(char* szLine);
- bool IsNewSection(char* szLine);
- bool IsKeyValueLine(char* szLine);
- bool GetNewSectionContext(char* szLine, string& strNewSectionContext);
- bool GetKeyValue(char* szLine, string& strKey, string& strValue);