读写INI文件源码(点击关注)

适用于INI读取保存的场景,代码交完整,可以编译直接使用;并且作者解决了中文乱码问题;

INI.h

cpp 复制代码
/*
@@此开源代码来自于无锡的钱进,使用者请标注出处
*/
#pragma once
#include <windows.h>
#include <iostream>
#include <string>
#include <sstream>
#include <cstdlib>
#include <locale>
#include <codecvt>
std::string ToString(int value);// Helper function to convert int to string
std::string ToString(float value);// Helper function to convert float to string
std::string ToString(double value);// Helper function to convert double to string
std::string ToString(bool value);// Helper function to convert bool to string
int ToInt(const std::string& str);// Helper function to convert string to int
float ToFloat(const std::string& str);// Helper function to convert string to float
double ToDouble(const std::string& str);// Helper function to convert string to double
bool ToBool(const std::string& str);// Helper function to convert string to bool
std::wstring StringToWString(const std::string& str);// Helper function to convert std::string to wstring
std::string WStringToString(const std::wstring& wstr);
CString stringToCString(const std::string& str);
void SaveIniFile(const std::wstring& section, const std::wstring& key, const std::wstring& value, const std::wstring& filePath);
std::wstring ReadIniFile(const std::wstring& section, const std::wstring& key, const std::wstring& filePath);

INI.cpp

cpp 复制代码
/*
@@此开源代码来自于无锡的钱进,使用者请标注出处
*/
#include"stdafx.h"
#include"INI.h"

std::string ToString(int value) {
	std::ostringstream oss;
	oss << value;
	return oss.str();
}

std::string ToString(float value) {
	std::ostringstream oss;
	oss << value;
	return oss.str();
}

std::string ToString(double value) {
	std::ostringstream oss;
	oss << value;
	return oss.str();
}

std::string ToString(bool value) {
	return value ? "true" : "false";
}

int ToInt(const std::string& str) {
	return std::atoi(str.c_str());
}

float ToFloat(const std::string& str) {
	return std::atof(str.c_str());
}

double ToDouble(const std::string& str) {
	return std::atof(str.c_str());
}

bool ToBool(const std::string& str) {
	return str == "true";
}

// 解决中文乱码问题
std::wstring StringToWString(const std::string& str) {	
	if (str.empty()) {
		return std::wstring();
	}
	std::wstring result;
	int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0);
	if (len < 0)return result;
	wchar_t* buffer = new wchar_t[len + 1];
	if (buffer == NULL)return result;
	MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len);
	buffer[len] = '\0';
	result.append(buffer);
	delete[] buffer;
	return result;
}

std::string WStringToString(const std::wstring& wstr) {
	std::string result;
	int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);
	if (len <= 0)return result;
	char* buffer = new char[len + 1];
	if (buffer == NULL)return result;
	WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);
	buffer[len] = '\0';
	result.append(buffer);
	delete[] buffer;
	return result;
}

CString stringToCString(const std::string& str)
{
	std::wstring wstr = StringToWString(str);
	CString strTemp = CString(wstr.c_str());
	return strTemp;
}

void SaveIniFile(const std::wstring& section, const std::wstring& key, const std::wstring& value, const std::wstring& filePath) {
	WritePrivateProfileString(section.c_str(), key.c_str(), value.c_str(), filePath.c_str());
}

std::wstring ReadIniFile(const std::wstring& section, const std::wstring& key, const std::wstring& filePath) {
	wchar_t buffer[256];
	GetPrivateProfileString(section.c_str(), key.c_str(), L"Default", buffer, 256, filePath.c_str());
	return std::wstring(buffer);
}
相关推荐
爱奥尼欧3 小时前
10.C++ string 实现详解
java·开发语言·c++
会周易的程序员3 小时前
软件接入大模型实现 Agent —— 从原理到 C++ 落地完全指南
c++·人工智能·物联网·架构·agent·工业协议·mcp
hetao17338374 小时前
2026-08-21~23 hetao1733837 的刷题记录
c++·算法
Brilliantwxx6 小时前
【Linux】 进程(5) 僵尸进程与内存泄漏扩展
linux·运维·服务器·网络·c++
程与留6 小时前
08_对话框系统全解析——模态非模态、QMessageBox、QFileDialog
c++·qt
程序员的园7 小时前
赋值运算符为什么要避免自赋值?
c++
Escalating_xu7 小时前
【C++ vector 深度解析】从常用接口、扩容机制与迭代器失效到核心模拟实现
java·c++·面试
牛艺翔7 小时前
C++ 基础知识
开发语言·c++
兔兔兔兔18 小时前
记录C++ 11
开发语言·c++
码匠许师傅8 小时前
【C++ 面试真题】32. 聊聊 C++ 的原子变量与无锁编程
java·c++·面试