// Copyright (c) 2020 Lv Decai, Shenzhen, China.// Filename: IniFile.cpp// Version: 1.0// Release date: 2020年10月11日// License: MIT (http://opensource.org/licenses/MIT)#include "StdAfx.h"#include "ConvertUtility.h"#include "IniFile.h"#include "StringUtility.h"NAMESPACE_BEGIN;// 构造函数CIniFile::CIniFile(PCTSTR sIniFilePath): m_sIniFilePath(sIniFilePath){}// 重新设置 INI 配置文件路径void CIniFile::SetFilePath(PCTSTR sIniFilePath){m_sIniFilePath = sIniFilePath;}// 读取区段列表void CIniFile::GetSectionList(list<CString>& lstSection){DWORD iBufferSize = 256;BOOL bContinue = TRUE;while (bContinue){TCHAR* sBuffer = new TCHAR[iBufferSize];memset(sBuffer, 0, sizeof(TCHAR) * iBufferSize);DWORD iReadSize = GetPrivateProfileString(NULL, NULL, NULL, sBuffer, iBufferSize, m_sIniFilePath);if (iReadSize == iBufferSize - 1|| iReadSize == iBufferSize - 2){iBufferSize *= 4;}else{TCHAR* sCategory = sBuffer;while (*sCategory != _T('0円')){lstSection.push_back(sCategory);sCategory += lstSection.back().GetLength() + 1;}bContinue = FALSE;}delete[] sBuffer;}}// 读取指定区段中的键列表void CIniFile::GetKeyList(PCTSTR sCategory, list<CString>& lstKey){DWORD iBufferSize = 256;BOOL bContinue = TRUE;while (bContinue){TCHAR* sBuffer = new TCHAR[iBufferSize];memset(sBuffer, 0, sizeof(TCHAR) * iBufferSize);DWORD iReadSize = GetPrivateProfileString(sCategory, NULL, NULL, sBuffer, iBufferSize, m_sIniFilePath);if (iReadSize == iBufferSize - 1|| iReadSize == iBufferSize - 2){iBufferSize *= 4;}else{TCHAR* sKey = sBuffer;while (*sKey != _T('0円')){lstKey.push_back(sKey);sKey += lstKey.back().GetLength() + 1;}bContinue = FALSE;}delete[] sBuffer;}}// 获取整数类型的选项值// 返回值:如果选项值存在则返回选项值,否则返回缺省值int CIniFile::GetInt(PCTSTR sCategory, PCTSTR sKey, int iDefaultValue){return GetPrivateProfileInt(sCategory, sKey, iDefaultValue, m_sIniFilePath);}// 获取浮点数类型的选项值// 返回值:如果选项值存在则返回选项值,否则返回缺省值double CIniFile::GetFloat(PCTSTR sCategory, PCTSTR sKey, double fDefaultValue){CString sValue = GetString(sCategory, sKey);if (sValue.IsEmpty()){return fDefaultValue;}else{return _ttof(sValue);}}// 获取字符串类型的选项值// 返回值:如果选项值存在则返回选项值,否则返回缺省值CString CIniFile::GetString(PCTSTR sCategory, PCTSTR sKey, PCTSTR sDefaultValue){CString sResult;DWORD iBufferSize = 256;BOOL bContinue = TRUE;while (bContinue){TCHAR* sBuffer = new TCHAR[iBufferSize];memset(sBuffer, 0, sizeof(TCHAR) * iBufferSize);DWORD iReadSize = GetPrivateProfileString(sCategory, sKey, sDefaultValue, sBuffer, iBufferSize, m_sIniFilePath);if (iReadSize == iBufferSize - 1|| iReadSize == iBufferSize - 2){iBufferSize *= 4;}else{sResult = sBuffer;bContinue = FALSE;}delete[] sBuffer;}return sResult;}// 获取字符串列表类型的选项值// 返回值:选项值参数的引用list<CString>& CIniFile::GetList(PCTSTR sCategory, PCTSTR sKey, list<CString>& lstOption, PCTSTR sElementDivision){CString sValueList = GetString(sCategory, sKey);StringUtility::Split(sValueList, lstOption, sElementDivision);return lstOption;}// 设置整数类型的选项值// 返回值:设置是否成功BOOL CIniFile::SetInt(PCTSTR sCategory, PCTSTR sKey, int iValue){return SetString(sCategory, sKey, ConvertUtility::ToString(iValue));}// 设置浮点数类型的选项值// 返回值:设置是否成功BOOL CIniFile::SetFloat(PCTSTR sCategory, PCTSTR sKey, double fValue){return SetString(sCategory, sKey, ConvertUtility::ToString(fValue));}// 设置字符串列表类型的选项值// 返回值:设置是否成功BOOL CIniFile::SetString(PCTSTR sCategory, PCTSTR sKey, PCTSTR sValue){return WritePrivateProfileString(sCategory, sKey, sValue, m_sIniFilePath);}// 设置字符串列表类型的选项值// 返回值:设置是否成功BOOL CIniFile::SetList(PCTSTR sCategory, PCTSTR sKey, const list<CString>& lstValue, PCTSTR sElementDivision){CString sValueList;for (auto& sValue : lstValue){sValueList += sValue + sElementDivision;}return SetString(sCategory, sKey, sValueList);}NAMESPACE_END;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。