SimpleIni 使用指北

SimpleIni

SimpleIni 提供用于读取和写入 INI 样式配置文件的 API。使用 MIT 许可证以开源和免费形式发布。

Offical docs

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;
}
上一篇
下一篇