读写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);
}
相关推荐
weixin_307779137 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
AI wins7 小时前
c++新增頭文件
c++
Shadow(⊙o⊙)7 小时前
仿muduo实现高并发服务器——事件就绪管理Channel.hpp
服务器·c++
by209997 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
音草8 小时前
C++ 继承详解:从概念到菱形继承
c++
weixin_307779138 小时前
C++代码实现MATLAB中的spectralcluster函数功能
开发语言·c++·算法·matlab
xiaoye-duck9 小时前
《C++ 项目:手写大模型接入 SDK》Trae IDE 开发环境搭建与依赖管理
c++·ide·语言模型
沫璃染墨9 小时前
《Qt从零入门系列(十四):QThread多线程详解——从线程创建到客户端阻塞处理》
开发语言·c++·笔记·qt·ui·交互·线程
草莓熊Lotso9 小时前
【C++ 基于微服务的即时通讯系统】Elasticsearch 从安装到 C++ 客户端二次封装全落地
linux·网络·数据库·c++·elasticsearch·微服务
CHPCWWHSU9 小时前
FreeCAD 源码解读:从 Property 到 Command,看一套 CAD 内核的完整闭环
c++·cad