读写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);
}
相关推荐
乙己40715 分钟前
设计模式——单例模式(singleton)
java·c++·单例模式·设计模式
嵌入式小李.man1 小时前
linux中多路复用IO:select、poll和epoll
linux·c++
郝学胜-神的一滴1 小时前
QAxios研发笔记(二):在Qt环境下基于Promise风格简化Http的Post请求
开发语言·c++·笔记·qt·网络协议·程序人生·http
晨非辰1 小时前
《数据结构风云》:二叉树遍历的底层思维>递归与迭代的双重视角
数据结构·c++·人工智能·算法·链表·面试
Yupureki4 小时前
从零开始的C++学习生活 17:异常和智能指针
c语言·数据结构·c++·学习·visual studio
deng-c-f11 小时前
配置(4):VScode c/c++编译环境的配置:c_cpp_properties.json
c语言·c++·vscode
应用市场11 小时前
Godot C++开发指南:正确获取节点的Forward/Up/Right方向向量
c++·游戏引擎·godot
小-黯12 小时前
OpenGL使用C++ 绘制三角形
c++·opengl·xmake
code_ing-12 小时前
【Linux】命令行参数与环境变量
linux·c++·windows·笔记
wangjialelele12 小时前
Qt中的常用组件:QWidget篇
开发语言·前端·c++·qt