分享一个MFC操作本地INI配置文件的类
2021/8/22 6:37:23
本文主要是介绍分享一个MFC操作本地INI配置文件的类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MFC操作本地INI配置文件的类
目录- MFC操作本地INI配置文件的类
- 简述
- 使用示例
- 头文件
- 源文件
简述
ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。下面程序就是对Windows API二次封装的操作类
使用示例
测试平台:VS2019
此处示例只有关键代码
// 1.定义INI文件操作对象 CIniFileEdit m_cfgFile; // 2.定义键值对象并初始化,设置文件路径(也可在键值对象里面做初始化) m_cfgFile.SetFileHandle(_T("./DownloadConfig.ini")); cfg.lpAppName = _T("PATH"); cfg.lpKeyName = _T("filepath"); cfg.lpFileName = NULL; // 4.调用相关接口 // 获取键值接口调用示例 m_cfgFile.GetProfileString(&cfg, str); AfxMessageBox(str); // 设置键值接口调用示例 cfg.lpKeyName = _T("hexpath"); cfg.lpString = _T("D:/C++&CODE/m0.hex"); m_cfgFile.SetProfileString(&cfg); m_cfgFile.GetProfileString(&cfg, str); AfxMessageBox(str); // 删除子键值接口调用示例 m_cfgFile.RemoveProfileSubKey(_T("PATH"), _T("code")); // 删除节点键值接口调用示例 m_cfgFile.RemoveProfileKey(_T("PATH"));
头文件
#pragma once /* INI本地配置文件解析类 */ class CIniFileEdit { LPCTSTR m_pCfgFile; // INI配置文件路径 public: typedef struct { LPCTSTR lpAppName; // INI文件中的一个字段名. LPCTSTR lpKeyName; // lpAppName下的一个键名,通俗讲就是变量名. LPCTSTR lpString; // 键值, 也就是变量的值,不过必须为LPCTSTR型或CString型的. LPCTSTR lpFileName; // 配置文件路径 } CfgStrStruct; typedef struct { LPCTSTR lpAppName; // INI文件中的一个字段名. LPCTSTR lpKeyName; // lpAppName下的一个键名,通俗讲就是变量名. INT nDefault; // 键值, 也就是变量的值,不过必须为LPCTSTR型或CString型的. LPCTSTR lpFileName; // 配置文件路径 } CfgIntStruct; public: // 构造与析构函数 CIniFileEdit(LPCTSTR file=NULL); virtual ~CIniFileEdit(); // 初始化文件/获取文件路径,把路径首地址值作为一个句柄存储到m_pCfgFile void SetFileHandle(LPCTSTR handle); LPCTSTR GetFileHandle(void); // 字符串类型键值操作 DWORD GetProfileString(CfgStrStruct *pCfg, CString &nReturn); // 读取键值 BOOL SetProfileString(CfgStrStruct *pCfg); // 写入键值 // 数值类型键值操作 UINT GetProfileInt(CfgIntStruct* pCfg, INT nDefault); // 读取键值 // 删除键操作 BOOL RemoveProfileKey(LPCTSTR lpAppName, LPCTSTR lpFileName = NULL); // 删除节点 BOOL RemoveProfileSubKey(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpFileName = NULL); // 删除键值 };
源文件
#include "pch.h" #include "CIniFileEdit.h" CIniFileEdit::CIniFileEdit(LPCTSTR file) { m_pCfgFile = file; } CIniFileEdit::~CIniFileEdit() { } /* * @brief:设置本地INI配置文件路径 * @param: * handle:INI配置文件路径 **/ void CIniFileEdit::SetFileHandle(LPCTSTR handle) { m_pCfgFile = handle; } /* * @brief:获取本地INI配置文件路径 * @return:返回m_pCfgFile的值,若用户未初始化则缺省为NULL **/ LPCTSTR CIniFileEdit::GetFileHandle(void) { return m_pCfgFile; } /* * @brief:获取字符串键值 * @param: * pCfg:键值结构体 * szReturn:返回值缓冲区 * @return:返回值是复制到缓冲区的字符数,不包括空终止字符 **/ DWORD CIniFileEdit::GetProfileString(CfgStrStruct* pCfg, CString& szReturn) { if (NULL == pCfg->lpFileName && NULL == m_pCfgFile) return NULL; LPCTSTR fileName; if (NULL != pCfg->lpFileName) fileName = pCfg->lpFileName; else fileName = m_pCfgFile; return ::GetPrivateProfileString(pCfg->lpAppName, pCfg->lpKeyName, pCfg->lpString, szReturn.GetBuffer(MAX_PATH), MAX_PATH, fileName); } /* * @brief:把键值写入本地INI配置文件 * @param: * pCfg:键值结构体,详情见@CfgIntStruct * @return:成功返回TRUE,否则返回FALSE **/ BOOL CIniFileEdit::SetProfileString(CfgStrStruct* pCfg) { if (NULL == pCfg->lpFileName && NULL == m_pCfgFile) return NULL; LPCTSTR fileName; if (NULL != pCfg->lpFileName) fileName = pCfg->lpFileName; else fileName = m_pCfgFile; return ::WritePrivateProfileString(pCfg->lpAppName, pCfg->lpKeyName, pCfg->lpString, fileName); } /* * @brief:获取字符串键值 * @param: * pCfg:键值结构体 * nDefault:默认返回值(注:当读取不到键值时,默认返回) * @return:返回值是复制到缓冲区的字符数,不包括空终止字符 **/ UINT CIniFileEdit::GetProfileInt(CfgIntStruct* pCfg, INT nDefault) { if (NULL == pCfg->lpFileName && NULL == m_pCfgFile) return NULL; LPCTSTR fileName; if (NULL != pCfg->lpFileName) fileName = pCfg->lpFileName; else fileName = m_pCfgFile; return ::GetPrivateProfileInt(pCfg->lpAppName, pCfg->lpKeyName, nDefault, fileName); } /* * @brief:删除顶层节点键值 * @param: * lpAppName:节点键值名称 * lpFileName:配置文件路径,缺省为NULL,使用m_pCfgFile的值 * @return:成功返回TRUE,否则返回FALSE **/ BOOL CIniFileEdit::RemoveProfileKey(LPCTSTR lpAppName, LPCTSTR lpFileName) { if (NULL == lpFileName && NULL == m_pCfgFile) return NULL; LPCTSTR fileName; if (NULL != lpFileName) fileName = lpFileName; else fileName = m_pCfgFile; return ::WritePrivateProfileString(lpAppName, NULL , NULL, fileName); } /* * @brief:删除子键值 * @param: * lpAppName:节点键值名称 * lpKeyName:子键值名称 * lpFileName:配置文件路径,缺省为NULL,使用m_pCfgFile的值 * @return:成功返回TRUE,否则返回FALSE **/ BOOL CIniFileEdit::RemoveProfileSubKey(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpFileName) { if (NULL == lpFileName && NULL == m_pCfgFile) return NULL; LPCTSTR fileName; if (NULL != lpFileName) fileName = lpFileName; else fileName = m_pCfgFile; return ::WritePrivateProfileString(lpAppName, lpKeyName, NULL, fileName); }
欢迎指出bug,以及共同继续完善此接口类
这篇关于分享一个MFC操作本地INI配置文件的类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享