另外我额外提供了一个函数:CeGetPrivateProfileKeyNames,用于读取某个 section 的所有 key 名称。
当然,如果是在 PC 平台,我们就没有必要使用这里我所提供的代码,因为有系统 API 可以调用。
需要注意的是,我提供的代码和 PC 端 API 相比,基本功能,参数意义完全相同,但具有以下一些额外要求:
(1)大小写敏感。(当然也可以通过修改代码,令其大小写不敏感)
(2)每一行,section, key, value, “=” 的前后不允许有空格。
(3)注释行用英文分号“;"起始。允许存在空行。
(4)每一行的字符数不能超过 260 字符(取决于代码中的宏定义)。
(5)函数代码同时适用 unicode 和多字节字符串 的环境。
(6)由于采用标准文件操作函数,因此 CeGetPrivateProfileSectionNames 函数并不保证原子性。(这一点和 PC API 不同)
下面是相关函数代码:
(a) IniFile.h
}
=============================
...
nSectionBegin -> [section2]
...
nKeyBegin -> key2=value2
nNextKey -> ...
...
nNextSection -> [otherSection]
...
=============================
其他文件指针的含义是:nInsertPos - 新的KEY=Value开始写入位置; nCopyPos - 文件的后半部分在原始文件中的位置(整体不需要改写,但可能需要前移或后移),从这里到文件结尾的内容会在改写ini文件之前拷贝到内存,改写KEY后,再写回文件并附加到文件尾部。
上面的代码中,包含 StdAfx.h 通常是因为默认设定,如果取消预编译头的选项,则可以不包含它。
然后我们可以很方便对上面的代码进行测试: