使用C++读写和添加.ini文件中的配置参数

 关于如何读取和修改ini配置文件的文章挺多的,而且读写操作也简单,记录一下,再补充一点边缘的东西留一篇以后备用。

一、 如何读取和修改ini配置文件

1. 头文件:#include <Shlwapi.h>

2. 读写的三个函数

/******************************************************************************************
获取键值
DWORD GetPrivateProfileString(
LPCTSTR lpAppName,        // INI文件中的一个字段名[节名]可以有很多个节名
LPCTSTR lpKeyName,        // lpAppName 下的一个键名,也就是里面具体的变量名
LPCTSTR lpDefault,        // 如果lpReturnedString为空,则把个变量赋给lpReturnedString
LPTSTR lpReturnedString,  // 存放键值的指针变量,用于接收INI文件中键值(数据)的接收缓冲区
DWORD nSize,            // lpReturnedString的缓冲区大小
LPCTSTR lpFileName        // INI文件的路径
);
UINT GetPrivateProfileInt(
LPCTSTR lpAppName,  // INI文件中的一个字段名[节名]可以有很多个节名
LPCTSTR lpKeyName,  // lpAppName 下的一个键名,也就是里面具体的变量名
INT nDefault,       // 如果没有找到指定的数据返回,则把个变量值赋给返回值
LPCTSTR lpFileName  // INI文件的路径
);
******************************************************************************************
修改键值或添加节点与键值
BOOL WritePrivateProfileString(
LPCTSTR lpAppName,  // INI文件中的一个字段名[节名]可以有很多个节名
LPCTSTR lpKeyName,  // lpAppName 下的一个键名,也就是里面具体的变量名
LPCTSTR lpString,   // 键值,也就是数据
LPCTSTR lpFileName  // INI文件的路径
);
******************************************************************************************/

 其实只要这么多你基本就可以完成对ini配置参数文件进行读写和添加了。

3. 代码示例(VS2015的C++空项目)。

#include <iostream>
#include <io.h>
#include <Shlwapi.h>

using namespace std;

int main(int argc, char *argv[])
{
//读取内容
	char fileSrc[_MAX_DIR];
	memset(fileSrc, 0, _MAX_DIR);
	strcpy_s(fileSrc, "./Param.ini");
	if (_access(fileSrc, 0))
	{//判断文件是否存在
		cout << " File Path Error !" << endl;
		system("PAUSE");
		return 0;
	}
	char strbuf[255];
	memset(strbuf, 0, sizeof(strbuf));
	GetPrivateProfileString("USER_INFO", "UserName", "", strbuf, sizeof(strbuf) - 1, fileSrc);
	cout << strbuf << endl;
	memset(strbuf, 0, sizeof(strbuf));
	GetPrivateProfileString("USER_INFO", "Password", "", strbuf, sizeof(strbuf) - 1, fileSrc);
	cout << strbuf << endl;

	int MemberNumber = GetPrivateProfileInt("USER_INFO", "MemberNumber", 0, fileSrc);
	cout << MemberNumber << endl;

//修改内容
	WritePrivateProfileString("USER_INFO", "Password", "join54321", fileSrc);

//添加加内容(无论数字还是字符串修改写入都用一个函数)
	WritePrivateProfileString("USER_MACHINE", "MachineNumber", "151221001", fileSrc);
	WritePrivateProfileString("USER_MACHINE", "LicenseNumber", "A5B7LV30MO", fileSrc);

	system("PAUSE");
	return 0;
}
  • 修改前的文件

  • 运行输出

  • 文件最终状态

4. 使用不同版本VS时可能出现的问题

  • 在包含了头文件后,虽然语法上没有任何错误提示,但是编译时却报错。

在文件顶部加上#pragma comment(lib,"Shlwapi.lib")试试。

  • 在使用读写函数时,使用字符串作为参数时提示:参数不兼容。

使用#include <afxconv.h>中的USES_CONVERSION;A2TT2A将字符串转换宽字节类型。值得注意的是使用时不要定义字符数组通过A2T转换传递给函数以存储数据,这样会导致存储进的内容乱码,你可以先定义WCHAR去传给函数存储数据,然后再通过T2A转换成你要的字符串。

二、程序后台运行命令行指令(避免闪黑框)

 ShellExecute(NULL, NULL, _T("cmd"), _T("/C ipconfig /all > record"), NULL, SW_HIDE);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值