读写INI文件源码(点击关注)
适用于INI读取保存的场景,代码交完整,可以编译直接使用;并且作者解决了中文乱码问题;
INI.h
/*
@@此开源代码来自于无锡的钱进,使用者请标注出处
*/
#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
/*
@@此开源代码来自于无锡的钱进,使用者请标注出处
*/
#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);
}