Windows下 C++实现INI文件的读取与设置

一、INI文件

INI文件通常为为Windows下用于存储设置的一种文件格式,其包含多个Section,用[]表示,每个Section下包含多个键值对,用=表示,如下图所示

二、读取和设置exe程序下INI文件示例

#pragma once
#include<Windows.h>
#include<iostream>
#include<sstream>
class IniReadAndW
{
public:
    std::string GetIniString(const std::string& iniFilePath, const std::string& section, const std::string& key);

    int GetIniInt(const std::string& iniFilePath, const std::string& section, const std::string& key);

    double GetIniDouble(const std::string& iniFilePath, const std::string& section, const std::string& key);

    bool WriteIniString(const std::string& iniFilePath, const std::string& section, const std::string& key, const std::string& value);

    bool WriteIniDouble(const std::string& iniFilePath, const std::string& section, const std::string& key, double value);
};
#include "IniReadAndW.h"

std::string IniReadAndW::GetIniString(const std::string& iniFilePath, const std::string& section, const std::string& key)
{
    char buffer[255];
    GetPrivateProfileStringA(section.c_str(), key.c_str(), "", buffer, sizeof(buffer), iniFilePath.c_str());
    return std::string(buffer);
}

int IniReadAndW::GetIniInt(const std::string& iniFilePath, const std::string& section, const std::string& key)
{
    return GetPrivateProfileIntA(section.c_str(), key.c_str(), 0, iniFilePath.c_str());
}

double IniReadAndW::GetIniDouble(const std::string& iniFilePath, const std::string& section, const std::string& key)
{
    std::string value = GetIniString(iniFilePath, section, key);
    return std::stod(value); // 使用C++11的字符串转double函数
}

bool IniReadAndW::WriteIniString(const std::string& iniFilePath, const std::string& section, const std::string& key, const std::string& value)
{
    return WritePrivateProfileStringA(section.c_str(), key.c_str(), value.c_str(), iniFilePath.c_str()) != 0;
}

bool IniReadAndW::WriteIniDouble(const std::string& iniFilePath, const std::string& section, const std::string& key, double value)
{
    std::ostringstream oss;
    oss << value;
    return WriteIniString(iniFilePath, section, key, oss.str());
}

main.cpp

#pragma once
#include"IniReadAndW.h"

int main()
{
	IniReadAndW test;
	char buffer[MAX_PATH];
	GetModuleFileName(NULL, buffer, MAX_PATH);
	std::string fullPath(buffer);

	// 获取路径
	std::size_t found = fullPath.find_last_of("\\");
	std::string exePath = fullPath.substr(0, found+1);


	std::string strPath = exePath + "config.ini";
	//ini文件读取
	std::string strName = test.GetIniString(strPath, "Information", "Name");
	int nAge = test.GetIniInt(strPath, "Information", "Age");
	double dHeight = test.GetIniDouble(strPath, "Information", "Height");
	std::cout << "Name: " << strName << std::endl;
	std::cout << "nAge: " << nAge << std::endl;
	std::cout << "dHeight: " << dHeight << std::endl;

	Sleep(1000);
	//ini文件写入
	test.WriteIniString(strPath, "Information", "Name", "小李");
	test.WriteIniDouble(strPath, "Information", "Age", 23);
	test.WriteIniDouble(strPath, "Information", "Height", 180.5);

}

运行结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值