适用于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);
}