如何使用C++语言,读取ini文件中空格
2015-05-22 11:43
1866 查看
在使用GetPrivateProfileString函数时,有时我们需要读取ini配置文件中的前置空格,怎么办呢?
现在给出一个例子:
Config.ini文件的内容如下:
输出结果:
总结:如果想要保留从ini文件中读到的字符串中的前置空格或者后置空格,只需要将每个key值中的整个值都使用英文的 单引号 引起来,就可以实现效果,否则,读取出来的数据,将会是去掉前置和后置空格的字符串
GetPrivateProfileString使用时的限制事项如下:
1.可指定数据取得缓冲区的最大长度nSize为0xFFFF, 即可最大取得的数据长度为nSize-1(65534)。另外,使用WritePrivateProfileString写入则没有此限制。
2.读取INI数据时,遇到换行字符(0x0D, 0x0A)与NULL(0x00)即刻停止,忽略之后的字符。
3.读取INI时,会先从头找Section,找到后即在此Section中查找Key,要是在这个Section找不到此Key的话,即认为此Key不存在,即便此后还有同名的Section-Key定义。比如下面这个具体的例子里,使用GetPrivateProfileString则永远无法成功读取到Section1Key2。
[Section1]
Section1Key1=・・・
[Section2]
Section2Key1=・・・
[Section1]
Section1Key2=・・・ //× 永远无法找到它
4.此API函数有一个默认值参数lpDefault,用于指定没有找到指定的字段名或键名时默认的返回字符。由于INI文件被独占读取打开等原因导致的INI无法读取时也返回此默认参数,所以无法得知此API调用本身是否发生了错误,即无法辨别是无法读取INI还是指定的字段名或键名在INI中不存在 。
5.写入INI的字符串要是有空格(0x20)开头或是结尾,虽然可以正确写入不过读取时开头与结尾的空格会被自动忽略。要是真的有必要保存这些空格的话,有一个解决办法:写入前在字符串的前后加上‘。而且读取时会自动忽略开头与结尾的’,无需多余处理。
现在给出一个例子:
#include <stdio.h> #include <windows.h> int main() { char szCont[100]; int iReadLen = 0; memset(szCont, 0, sizeof(szCont)); iReadLen = GetPrivateProfileString("TESTDATA", "Value", "", szCont, sizeof(szCont), ".\\Config.ini"); printf("读取的数据长度为:%d\n读取的数据内容为:\"%s\"\n", iReadLen, szCont); return 0; }
Config.ini文件的内容如下:
[TESTDATA] Value=' 这是一个读取ini文件中前置空格的例子 ' |
读取的数据长度为:39 读取的数据内容为:" 这是一个读取ini文件中前置空格的例子 " |
GetPrivateProfileString使用时的限制事项如下:
1.可指定数据取得缓冲区的最大长度nSize为0xFFFF, 即可最大取得的数据长度为nSize-1(65534)。另外,使用WritePrivateProfileString写入则没有此限制。
2.读取INI数据时,遇到换行字符(0x0D, 0x0A)与NULL(0x00)即刻停止,忽略之后的字符。
3.读取INI时,会先从头找Section,找到后即在此Section中查找Key,要是在这个Section找不到此Key的话,即认为此Key不存在,即便此后还有同名的Section-Key定义。比如下面这个具体的例子里,使用GetPrivateProfileString则永远无法成功读取到Section1Key2。
[Section1]
Section1Key1=・・・
[Section2]
Section2Key1=・・・
[Section1]
Section1Key2=・・・ //× 永远无法找到它
4.此API函数有一个默认值参数lpDefault,用于指定没有找到指定的字段名或键名时默认的返回字符。由于INI文件被独占读取打开等原因导致的INI无法读取时也返回此默认参数,所以无法得知此API调用本身是否发生了错误,即无法辨别是无法读取INI还是指定的字段名或键名在INI中不存在 。
5.写入INI的字符串要是有空格(0x20)开头或是结尾,虽然可以正确写入不过读取时开头与结尾的空格会被自动忽略。要是真的有必要保存这些空格的话,有一个解决办法:写入前在字符串的前后加上‘。而且读取时会自动忽略开头与结尾的’,无需多余处理。
相关文章推荐
- 如何使用Python3读取配置文件(ini)
- 嵌入式 如何使用jlink从flash中读取数据保存为bin文件到本地
- 关于如何使用properties读取配置文件内容问题
- 如何使用QTextEdit读取文件!
- 如何创建和读取excel文件-poi的简单使用(一)
- 如何使用XlsReadWriteII在Delphi中读取Excel文件
- 如何使用10M的内存读入100M的文件,并且保证在读取过程中可进行删除、修改和增加内容
- 如何使用App.config文件,读取字符串?
- jdom 或 dom4j读取xml文件时如何让dtd验证使用本地dtd文件或者不生效
- linux shell脚本如何将文本内容按空格分行、如何使用timit原始corpus制作wav的scp文件
- 关于如何使用vc6.0读取xml文件中的内容
- 解决:Android使用自带sqlite开发时,apk中创建的数据库外部的进程是没有权限去读/写的,而且无法如何读取指定目录下的db文件
- 如何使用opencv的c++接口来读取、写结构体数组到xml文件中
- 如何使用opencv的c++接口来读取、写结构体数组到yml文件中
- 使用GetModuleFileName()获取当前.exe所在绝对路径,并且读取.ini配置文件
- python 文件处理模块的使用,如何读取文件中数据
- ZOJ 1099这道题如果从文件中读取数据,最关键的地方是处理好空格,按时我一直没有成功,所以这道题中没有使用文件
- 如何使用Python3读写INI配置文件
- VC操作INI文件 ,INI文件操作总结,如何操作INI文件,INI文件使用方法小结
- QT如何从配置文件读取参数并保存最近使用的参数