SimpleIni
SimpleIni 提供用于读取和写入 INI 样式配置文件的 API。使用 MIT 许可证以开源和免费形式发布。
Api (simple)
Api | Description |
---|---|
void SetUnicode(bool a_bIsUtf8 = true); |
设置数据的存储格式,参数为 true 时保存为 UTF-8,否则为本地编码 |
SI_Error LoadFile(const char * a_pszFile); |
从磁盘加载 INI 文件到内存中,参数为 INI 文件的有效路径,返回错误定义 |
SI_Error SaveFile(FILE * a_pFile, bool a_bAddSignature = false) const; |
将INI数据保存至一个文件中,a_pFile为二进制打开的文件描述符 |
void GetAllSections(TNamesDepend & a_names) const; |
检索所有的 section 名。这份名单是返回一个 STL 的 list,a_names(list) 接收所有的节名称 |
bool GetAllKeys(const SI_CHAR * a_pSection,TNamesDepend & a_names) const; |
获取一个 section 下的所有关键字,结果保存在 a_names 中 |
bool GetAllValues(const SI_CHAR * a_pSection,const SI_CHAR * a_pKey,TNamesDepend & a_values) const; |
获取一个指定 section 和关键字key 下的所有值,保存在 a_values |
int GetSectionSize(const SI_CHAR * a_pSection) const; |
获取指定 section 的 key 的个数,-1 表示 section 不存在于 INI 文件中,其他表示个数 |
const TKeyVal * GetSection(const SI_CHAR * a_pSection) const; |
返回一个 section 的键值对,用 map 保存 |
const SI_CHAR * GetValue(const SI_CHAR * a_pSection,const SI_CHAR * a_pKey,const SI_CHAR * a_pDefault = NULL,bool * a_pHasMultiple = NULL ) const; |
获取一个特定的key值。参数a_pDefault是如果没有找到将要返回的值 |
long GetLongValue(const SI_CHAR * a_pSection,const SI_CHAR * a_pKey,long a_nDefault = 0, bool * a_pHasMultiple = NULL) const; |
获取一个特定的key值。参数a_nDefault是如果没有找到将要返回的值,参数 a_pHasMultiple 可选收到通知,如果有这个key有多个条目;bool 同理 |
SI_Error SetLongValue(const SI_CHAR * a_pSection,const SI_CHAR * a_pKey,long a_nValue,const SI_CHAR * a_pComment = NULL,bool a_bUseHex = false); |
添加或更新一个section或者key ,最后一个参数 a_bUseHex 为 true 表示写入的值为十六进制,为 false 为十进制;bool 同理 |
直接 copy 的,省略了好多不太重要的东西,实际使用的话还是看 Example。
Example
void Init() {
CiPath = GetCiPath();
CiPath += "ci_setting.ini";
CSimpleIniA ini;
ini.SetUnicode();
SI_Error rc = ini.LoadFile(CiPath.c_str());
if (rc < 0) {
return FirstUse(), void();
}
samplePath = (string)ini.GetValue("cplusplus", "sample_path");
compileOptions = (string)ini.GetValue("cplusplus", "compile_options");
}
void FirstUse() {
CSimpleIniA ini;
fprintf(stderr, "ci >> init ci_setting.ini");
freopen(CiPath.c_str(), "w", stdout); fclose(stdout);
SI_Error rc = ini.LoadFile(CiPath.c_str());
if (rc < 0) {
return fprintf(stderr, "ci >> Error !"), void();
}
ini.SetValue("cplusplus", "sample_path", samplePath.c_str());
ini.SetValue("cplusplus", "compile_options", compileOptions.c_str());
ini.SaveFile(CiPath.c_str());
}
string GetCiPath() {
char _szPath[255 + 1]={0};
GetModuleFileName(NULL, _szPath, 255);
(strrchr(_szPath, '\\'))[1] = 0;
return _szPath;
}