MFC 读取 配置文件

本文详细讨论了在MFC中使用GetPrivateProfileString函数读取配置文件时遇到的内存错误问题,重点在于文件存在性和权限检查。通过实例展示了如何修复这一问题,包括添加文件存在检查和使用正确的文件路径操作。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值