一、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);
}