在MFC中操作.ini文件
2013-11-14 16:44
288 查看
关于.ini
在我们写程序时,总有一些配置信息需要保存下来,以便在下一次启动程序完成初始化,这实际上是一种类持久化。将一些信息写入INI文件(initialization
file)中,可完成简单的持久化支持。
Windows提供了API接口用于操作INI文件,其支持的INI文件格式一般如下:
===============================
[Section1]
Key11=value11
Key12=value12
[Section2]
Key21=value21
Key22=value22
...
[SectionN]
KeyN1=valueN1
KeyN2=valueN2
===============================
一般一个INI文件可有N个节,每节可有n个键名及值对应,每个键名及其值以等式形式占一行。
一般键的名称可任取,不过建议用有意义的字符及词构成。值一般可为整数和字符串,其它类型要进行转换。
注意,字符串存贮在INI文件中时没有引号;key和value之间的等号前后不容空格;注释以分号“;”开头。
此外,Ini文件路径为绝对路径,不能是相对路径,可以使用GetCurrentDirectory来获取当前exe程序所在路径:
Cstring des;
GetCurrentDirectory(MAX_PATHLENGTH,des.GetBuffer(MAX_PATHLENGTH));
des.ReleaseBuffer();
.ini的读写操作
WritePrivateProfileString()
Windows对ini文件的操作有专门的函数,平时主要用到的三个函数是:
::WritePrivateProfileString(); //写字符串到私有初始化文件;当ini不存在时会自动创建一个ini文件在指定路径。 ::GetPrivateProfileString(); //从私有初始化文件获取字符串型值 ::GetPrivateProfileInt(); //从私有初始化文件获取整型数值
1. BOOL
WritePrivateProfileString( //写字符串
LPCTSTR lpAppName, // INI文件中的一个字段名
LPCTSTR lpKeyName, // lpAppName下的一个键名,通俗讲就是变量名
LPCTSTR lpString, // 键值,也就是变量的值,不过必须为LPCTSTR型或CString型的
LPCTSTR lpFileName // 完整的INI文件名
);
实例:设现有一名学生,需把他的姓名和年龄写入 c:\student.ini 文件中
此时c:\stud\student.ini文件中的内容如下:
[StudentInfo] Name=张三
要将学生的年龄保存下来,只需将整型的值变为字符型即可:
2. DWORD GetPrivateProfileString( //读字符串
LPCTSTR lpAppName, //同上
LPCTSTR lpKeyName, //同上
LPCTSTR lpDefault, //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.
LPTSTR lpReturnedString, //接收INI文件中的值的CString对象,即目的缓存器
DWORD nSize, //目的缓存器的大小
LPCTSTR lpFileName //同上
);
实例:读入上例中的学生姓名
int MAX_PATH= 50;
CString strStudName;
GetPrivateProfileString("StudentInfo","Name","默认姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\student.ini");
注:GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使得CString对象在以后的代码中继续可
以实现长度自适应增长的功能。如果在你的后面的程序中需要继续使用该字符串变量,且要动态改变其长度,则需要在
GetBufer后面调用ReleaseBuffer();如果你GetBuffer以后程序自函数就退出,局部变量都不存在了,调用不调用
ReleaseBuffer没什么意义了。
3. UINT GetPrivateProfileInt(
//读整型值
LPCTSTR lpAppName, //同上
LPCTSTR lpKeyName, //同上
INT nDefault, //同上
LPCTSTR lpFileName //同上
);
实例:读入上例中的学生年龄
int nStudAge;
nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\student.ini");
读写系统配置文件
另外有不常用的三个函数,用于读写系统配置文件win.ini:
::GetProfileInt(); //从win.ini 获取整数值
::GetProfileString(); //从win.ini 获取字符串值
::WriteProfileString(); //写字符串到win.ini
在我们写程序时,总有一些配置信息需要保存下来,以便在下一次启动程序完成初始化,这实际上是一种类持久化。将一些信息写入INI文件(initialization
file)中,可完成简单的持久化支持。
Windows提供了API接口用于操作INI文件,其支持的INI文件格式一般如下:
===============================
[Section1]
Key11=value11
Key12=value12
[Section2]
Key21=value21
Key22=value22
...
[SectionN]
KeyN1=valueN1
KeyN2=valueN2
===============================
一般一个INI文件可有N个节,每节可有n个键名及值对应,每个键名及其值以等式形式占一行。
一般键的名称可任取,不过建议用有意义的字符及词构成。值一般可为整数和字符串,其它类型要进行转换。
注意,字符串存贮在INI文件中时没有引号;key和value之间的等号前后不容空格;注释以分号“;”开头。
此外,Ini文件路径为绝对路径,不能是相对路径,可以使用GetCurrentDirectory来获取当前exe程序所在路径:
Cstring des;
GetCurrentDirectory(MAX_PATHLENGTH,des.GetBuffer(MAX_PATHLENGTH));
des.ReleaseBuffer();
.ini的读写操作
WritePrivateProfileString()
Windows对ini文件的操作有专门的函数,平时主要用到的三个函数是:
::WritePrivateProfileString(); //写字符串到私有初始化文件;当ini不存在时会自动创建一个ini文件在指定路径。 ::GetPrivateProfileString(); //从私有初始化文件获取字符串型值 ::GetPrivateProfileInt(); //从私有初始化文件获取整型数值
1. BOOL
WritePrivateProfileString( //写字符串
LPCTSTR lpAppName, // INI文件中的一个字段名
LPCTSTR lpKeyName, // lpAppName下的一个键名,通俗讲就是变量名
LPCTSTR lpString, // 键值,也就是变量的值,不过必须为LPCTSTR型或CString型的
LPCTSTR lpFileName // 完整的INI文件名
);
实例:设现有一名学生,需把他的姓名和年龄写入 c:\student.ini 文件中
CString strName,strTemp; int nAge; strName="张三"; nAge=12; ::WritePrivateProfileString("StudentInfo","Name",strName,"c:\\student.ini"); |
[StudentInfo] Name=张三
要将学生的年龄保存下来,只需将整型的值变为字符型即可:
strTemp.Format("%d",nAge); ::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\student.ini"); |
LPCTSTR lpAppName, //同上
LPCTSTR lpKeyName, //同上
LPCTSTR lpDefault, //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.
LPTSTR lpReturnedString, //接收INI文件中的值的CString对象,即目的缓存器
DWORD nSize, //目的缓存器的大小
LPCTSTR lpFileName //同上
);
实例:读入上例中的学生姓名
int MAX_PATH= 50;
CString strStudName;
GetPrivateProfileString("StudentInfo","Name","默认姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\student.ini");
注:GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使得CString对象在以后的代码中继续可
以实现长度自适应增长的功能。如果在你的后面的程序中需要继续使用该字符串变量,且要动态改变其长度,则需要在
GetBufer后面调用ReleaseBuffer();如果你GetBuffer以后程序自函数就退出,局部变量都不存在了,调用不调用
ReleaseBuffer没什么意义了。
3. UINT GetPrivateProfileInt(
//读整型值
LPCTSTR lpAppName, //同上
LPCTSTR lpKeyName, //同上
INT nDefault, //同上
LPCTSTR lpFileName //同上
);
实例:读入上例中的学生年龄
int nStudAge;
nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\student.ini");
读写系统配置文件
另外有不常用的三个函数,用于读写系统配置文件win.ini:
::GetProfileInt(); //从win.ini 获取整数值
::GetProfileString(); //从win.ini 获取字符串值
::WriteProfileString(); //写字符串到win.ini
相关文章推荐
- 车道检测过程中遇到的问题
- MFC对话框中,将图片无变形地显示在图片控件框中(也适用于视频)
- BT服务器源码分析
- ID3DXMesh接口 创建自己的立方体网格
- [JavaScript] JS实现上传图片及时预览
- Servlet生命周期
- 采用Filter统一验证是否登录
- Hough变换原理---从图像中识别几何图形,确定其参数
- 大津法---OTSU算法
- 关于inline---代替宏定义
- 在word中,怎么插入一条水平线、粗线、波浪线、双直线、虚线 -------自动边框线
- Opencv2.3.1在VS2010平台上安装配置图解(64位系统)
- 遇到的问题------基于OPENCV的车流量识别
- MFC打开文件对话框
- 修改win7开机界面打造属于自己风格的win7开机动画
- Altium中 PCB的覆铜步骤与注意点
- [转]matlab中plot用法
- 杭电2032题
- OpenCV处理像素值
- ORA-000845 与 /dev/shm(tempfs)