MFC 读取 配置文件
CString iniFilePath = this->str_module_directory + _T("\\config.ini");
DWORD ret;
FILE * fp = fopen((CT2A)(iniFilePath), "r");
CString returnString;
TCHAR szValue[MAX_PATH + 1] = _T("");
if (fp) {
ret = GetPrivateProfileString(_T("common"), _T("configdir"), _T(""), szValue, MAX_PATH, iniFilePath);
returnString = szValue;
OutputDebugString(returnString);
}
配置文件
[common]
configdir="c:"
从一段代码谈GetPrivateProfileString的深坑
https://blog.csdn.net/whish1994/article/details/79746309
总结:GetPrivateProfileString注意文件是否存在,
文件不存在或不具有r读权限会在运行时报内存错误。
失败源代码如下:
string programDir = GetOcxPath(file);//得到ini配置文件路径
ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,“c:\base64bmp_config.ini”);
这段代码看起来没任何问题,在MFC ocx工程下编译链接都ok,但运行一直内存错误。
一直以为是ocx注册没有替换,或者是GetOcxPath存在内存错误,将GetOcxPath单元测试和断点调试没有任何问题。
最后增加了文件存在判断,不存在就读取默认文件就OK了。
改进后源代码如下:
string programDir = GetOcxPath(file);//得到ini配置文件路径
DWORD ret;
FILE* fp = fopen(programDir.data(),“r”);
if(!fp){
ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,“c:\base64bmp_config.ini”);
}else{
ret = GetPrivateProfileString(app,key,"",returnString,MAX_PATH,programDir.data());
}
MFC中配置文件的写入及读取操作
https://blog.csdn.net/zhulichen/article/details/50358577
MFC中配置文件的写入及读取操作
做了一个项目 其中有一块是记住登录密码的,之前写的程序是将用户名 密码 以及点击次数存放在数据库中,这样连接数据库后 便可完成数据的读取,但是总觉得有点麻烦,别人用的你程序还得需要连接数据库 这种方法不好,后面想到了当运行程序时,便让程序在系统中自行生成文件,然后把数据存至文件中,操作后发现该方法很好。
1、配置文件的写入
CString admin ,password;
int number;
ClickNumber.Format("%d",number);
::WritePrivateProfileString(“SaveInfo”,“用户名”,admin,“C://Windows//saveto.ini”);
::WritePrivateProfileString(“SaveInfo”,“密码”,password,“C://Windows//saveto.ini”);
::WritePrivateProfileString(“SaveInfo”,“点击次数”,ClickNumber,“C://Windows/saveto.ini”);
//分别是写入字符串和整数
//这样你便会发现在C盘下的Windows文件下有配置文件saveto.ini,可以记事本的形式打开并查看保存的内容
2、配置文件的读取
GetPrivateProfileString("SaveInfo","用户名","admin",admin.GetBuffer(MAX_PATH),MAX_PATH,"C://Windows//savetoini");//当用户名的值读取有误,这字符串admin的值为admin
GetPrivateProfileString(“SaveInfo”,“密码”,“123”,password.GetBuffer(MAX_PATH),MAX_PATH,“C://Windows//saveto.ini”);//当密码的值有误时,字符串password 的值为123
number=GetPrivateProfileInt(“SaveInfo”,“点击次数”,0,“C://Windows//saveto.ini”);//当点击次数的值有误时,整数型number的值为0