C++[类设计] ini配置文件读写类config
- //in Config.h
- #pragma once
- #include <windows.h>
- #include <shlwapi.h>
- #pragma comment(lib,"shlwapi")
- #include <Tchar.h>
- class CConfig
- {
- public:
- CConfig(LPTSTR strFileName=NULL,LPTSTR strFilePath=NULL);
- virtual ~CConfig(void);
- private:
- TCHAR m_szFileName[MAX_PATH];
- TCHAR m_szFilePath[MAX_PATH];
- TCHAR m_szAppName[MAX_PATH];
- const TCHAR *m_pszFileExt;
- const TCHAR *m_pszFileDir;
- public:
- bool AddKey(LPCTSTR strKeyName, LPCTSTR strKeyValue,LPCTSTR strSectionName=NULL,LPCTSTR strFilePath=NULL);
- bool DeleteKey(LPCTSTR strDelKeyName,LPCTSTR strSectionName=NULL,LPCTSTR strFilePath=NULL);
- bool DeleteSection(LPCTSTR strDelSectionName=NULL,LPCTSTR strFilePath=NULL);
- bool ReadKeyValue(LPCTSTR strKeyName,OUT LPTSTR strKeyVal, LPCTSTR strSectionName=NULL,LPCTSTR strFilePath=NULL);
- bool ReadKeyValue(LPCTSTR strKeyName, OUT int &nKeyVal, LPCTSTR strSectionName=NULL,LPCTSTR strFilePath=NULL);
- bool ModifyKeyValue(LPCTSTR strKeyName, LPCTSTR strKeyValue,LPCTSTR strSectionName=NULL,LPCTSTR strFilePath=NULL);
- int GetSectionCount(LPCTSTR strFilePath=NULL);
- int GetKeyCount(LPCTSTR strSectionName=NULL, LPCTSTR strFilePath=NULL);
- };
- //in Config.cpp
- #include "Config.h"
- /************************************************************************************************************/
- /* */
- /* Function name : CConfig */
- /* Description : Create and initialize a CConfig Object.The parameter strFileName indicated the name
- of the ini file,it must not contain extension .ini.And strFilePath indicated the path
- of the ini file which to be created and stored.If strFileName or strFilePath is NULL,then
- use the app's name or current directory as default ini file name or path.If application
- calls this member function to create it's ini file at default path,then the ini file will
- be stored unifily in the subdirectory "...\config\".
- Attention:This function does not create an actual ini file. */
- /* */
- /************************************************************************************************************/
- CConfig::CConfig(LPTSTR strFileName,LPTSTR strFilePath)
- : m_pszFileExt(_T(".ini")),m_pszFileDir(_T("\\config"))
- {
- memset(m_szFileName,0,MAX_PATH);
- memset(m_szFilePath,0,MAX_PATH);
- memset(m_szAppName,0,MAX_PATH);
- ::GetModuleFileName(NULL,m_szFilePath,MAX_PATH);
- ::GetFileTitle(m_szFilePath,m_szFileName,MAX_PATH);
- ::PathRemoveExtension(m_szFileName);
- _tcscpy_s(m_szAppName,MAX_PATH,m_szFileName);
- if( strFilePath!=NULL)
- {
- /*if strFilePath is valid,copy it to m_szFilePath and handle it to a directory*/
- if(::PathIsDirectory(strFilePath))
- {
- _tcscpy_s(m_szFilePath,MAX_PATH,strFilePath);
- ::PathRemoveBackslash(m_szFilePath);
- ::PathAddBackslash(m_szFilePath);
- }
- else//use a default directory
- {
- ::PathRemoveFileSpec(m_szFilePath);
- ::PathAddBackslash(m_szFilePath);
- }
- }
- else
- {
- ::PathRemoveFileSpec(m_szFilePath);
- _tcscat_s(m_szFilePath,MAX_PATH,m_pszFileDir);
- if(!::PathFileExists(m_szFilePath))
- {
- ::CreateDirectory(m_szFilePath,NULL);
- }
- ::PathAddBackslash(m_szFilePath);
- if(strFileName !=NULL)
- {
- _tcscpy_s(m_szFileName,MAX_PATH,strFileName);
- }
- }
- _tcscat_s(m_szFileName,MAX_PATH,m_pszFileExt);
- _tcscat_s(m_szFilePath,MAX_PATH,m_szFileName);
- }
- CConfig::~CConfig(void)
- {
- }
- /************************************************************************************************************/
- /* */
- /* Function name : AddKey */
- /* Description : Create a key-value pair with format "strKeyName=strKeyValue" in the specified section by
- strSectionName.If strSectionName is NULL,then use the app's name as default section
- name to be added into. If the section specified by strSectionName does not exist, it is
- created. The strKeyValue will be modified if strKeyName already exists.This function
- creates an actual ini file.
- Return true if the function succeed,otherwise false.
- */
- /* */
- /************************************************************************************************************/
- bool CConfig::AddKey(LPCTSTR strKeyName, LPCTSTR strKeyValue,LPCTSTR strSectionName,LPCTSTR strFilePath)
- {
- LPCTSTR szSectionName;
- LPCTSTR szFilePath;
- if(strSectionName==NULL)
- szSectionName=m_szAppName;
- else
- szSectionName=strSectionName;
- if(strFilePath==NULL)
- szFilePath=m_szFilePath;
- else
- szFilePath=strFilePath;
- if(::WritePrivateProfileString(szSectionName,strKeyName,strKeyValue,szFilePath))
- return true;
- else
- return false;
- }
- /************************************************************************************************************/
- /* */
- /* Function name : DeleteKey */
- /* Description : Delete a key and it's value from the specified section.If the parameter strSectionName is
- NULL,then delete the section with app's name.
- Return true if the function succeed,otherwise false. */
- /* */
- /************************************************************************************************************/
- bool CConfig::DeleteKey(LPCTSTR strDelKeyName,LPCTSTR strSectionName,LPCTSTR strFilePath)
- {
- LPCTSTR szSectionName;
- LPCTSTR szFilePath;
- if(strSectionName==NULL)
- szSectionName=m_szAppName;
- else
- szSectionName=strSectionName;
- if(strFilePath==NULL)
- szFilePath=m_szFilePath;
- else
- szFilePath=strFilePath;
- if(::WritePrivateProfileString(szSectionName,strDelKeyName,NULL,szFilePath))
- return true;
- else
- return false;
- }
- /************************************************************************************************************/
- /* */
- /* Function name : DeleteSection */
- /* Description : Delete a specified section and all it's associated contents from the initialization file.
- If the parameter strDelSectionName is no offered,then delete the section with app's name.
- Return true if the function succeed,otherwise false.
- /* */
- /************************************************************************************************************/
- bool CConfig::DeleteSection(LPCTSTR strDelSectionName,LPCTSTR strFilePath)
- {
- LPCTSTR szSectionName;
- LPCTSTR szFilePath;
- if(strDelSectionName==NULL)
- szSectionName=m_szAppName;
- else
- szSectionName=strDelSectionName;
- if(strFilePath==NULL)
- szFilePath=m_szFilePath;
- else
- szFilePath=strFilePath;
- if(::WritePrivateProfileString(szSectionName,NULL,NULL,szFilePath))
- return true;
- else
- return false;
- }
- /************************************************************************************************************/
- /* */
- /* Function name : ReadKeyValue */
- /* Description : Retrieves the value of strKeyName as String into the buffer specified by parameter
- strKeyVal.If the parameter strSectionName and strFilePath is no offered,then use the
- app's name as default section and ini file to be search.Return true if the function
- succeed,otherwise false,and the parameter strKeyVal will be set to NULL.
- /* */
- /************************************************************************************************************/
- bool CConfig::ReadKeyValue(LPCTSTR strKeyName, LPTSTR strKeyVal, LPCTSTR strSectionName,LPCTSTR strFilePath)
- {
- LPCTSTR szSectionName;
- LPCTSTR szFilePath;
- if(strSectionName==NULL)
- szSectionName=m_szAppName;
- else
- szSectionName=strSectionName;
- if(strFilePath==NULL)
- szFilePath=m_szFilePath;
- else
- szFilePath=strFilePath;
- ::GetPrivateProfileString(szSectionName,strKeyName,NULL,strKeyVal,_tcslen(strKeyVal),szFilePath);
- if(_tcscmp(strKeyVal,_T(""))==0)
- return false;
- else
- return true;
- }
- /************************************************************************************************************/
- /* */
- /* Function name : ReadKeyValue */
- /* Description : Retrieves the value of strKeyName as Int into the buffer specified by parameter
- strKeyVal.If the parameter strSectionName and strFilePath is no offered,then use the
- app's name as default section and ini file to be search.Return true if the function
- succeed,otherwise false,and the parameter strKeyVal will be set to -1.*/
- /* */
- /************************************************************************************************************/
- bool CConfig::ReadKeyValue(LPCTSTR strKeyName, int &nKeyVal, LPCTSTR strSectionName,LPCTSTR strFilePath)
- {
- LPCTSTR szSectionName;
- LPCTSTR szFilePath;
- if(strSectionName==NULL)
- szSectionName=m_szAppName;
- else
- szSectionName=strSectionName;
- if(strFilePath==NULL)
- szFilePath=m_szFilePath;
- else
- szFilePath=strFilePath;
- nKeyVal=::GetPrivateProfileInt(szSectionName,strKeyName,-1,szFilePath);
- if(-1 !=nKeyVal)
- return true;
- else
- return false;
- }
- /************************************************************************************************************/
- /* */
- /* Function name : ModifyKeyValue */
- /* Description : Replace the key value of strKeyName with strKeyValue .If the parameter strSectionName
- and strFilePath is no offered,then use the app's name as default section and ini file to
- be search.Return true if the function succeed,otherwise false. */
- /* */
- /************************************************************************************************************/
- bool CConfig::ModifyKeyValue(LPCTSTR strKeyName, LPCTSTR strKeyValue,LPCTSTR strSectionName,LPCTSTR strFilePath)
- {
- LPCTSTR szSectionName;
- LPCTSTR szFilePath;
- if(strSectionName==NULL)
- szSectionName=m_szAppName;
- else
- szSectionName=strSectionName;
- if(strFilePath==NULL)
- szFilePath=m_szFilePath;
- else
- szFilePath=strFilePath;
- ::WritePrivateProfileString(szSectionName,strKeyName,NULL,szFilePath);
- if(::WritePrivateProfileString(szSectionName,strKeyName,strKeyValue,szFilePath))
- return true;
- else
- return false;
- }
- /************************************************************************************************************/
- /* */
- /* Function name : GetSectionCount */
- /* Description : Retrieves the number of all sections in the initialization file specified by strFilePath.
- if strFilePath is NULL,then use the app's name as default ini file to be search.If the
- function succeed,the return value is not -1. */
- /* */
- /************************************************************************************************************/
- int CConfig::GetSectionCount(LPCTSTR strFilePath)
- {
- TCHAR szItem[MAX_PATH]={0};
- LPCTSTR szFilePath;
- if(strFilePath==NULL)
- szFilePath=m_szFilePath;
- else
- szFilePath=strFilePath;
- int nRet=::GetPrivateProfileSectionNames(szItem,MAX_PATH,szFilePath);
- int nSecCount=0;
- if(nRet !=MAX_PATH-2)
- {
- for(int i=0;i<MAX_PATH;i++)
- {
- if(szItem[i]==0 && szItem[i+1]!=0)
- {
- nSecCount++;
- }
- else if(szItem[i]==0 && szItem[i+1]==0)
- {
- nSecCount++;
- break;
- }
- }
- }
- else
- nSecCount=-1;
- return nSecCount;
- }
- /************************************************************************************************************/
- /* */
- /* Function name : GetKeyCount */
- /* Description : Retrieves the number of all key in the section specified by strSectionName in the
- initialization file specified by strFilePath.If strSectionName and strFilePath is NULL,
- then use the app's name as default section and ini file to be search.If the
- function succeed,the return value is not -1. */
- /* */
- /************************************************************************************************************/
- int CConfig::GetKeyCount(LPCTSTR strSectionName, LPCTSTR strFilePath)
- {
- TCHAR szItem[MAX_PATH]={0};
- LPCTSTR szSectionName;
- LPCTSTR szFilePath;
- if(strSectionName==NULL)
- szSectionName=m_szAppName;
- else
- szSectionName=strSectionName;
- if(strFilePath==NULL)
- szFilePath=m_szFilePath;
- else
- szFilePath=strFilePath;
- int nRet=::GetPrivateProfileSection(szSectionName,szItem,MAX_PATH,szFilePath);
- int nSecCount=0;
- if(nRet !=MAX_PATH-2)
- {
- for(int i=0;i<MAX_PATH;i++)
- {
- if(szItem[i]==0 && szItem[i+1]!=0)
- {
- nSecCount++;
- }
- else if(szItem[i]==0 && szItem[i+1]==0)
- {
- nSecCount++;
- break;
- }
- }
- }
- else
- nSecCount=-1;
- return nSecCount;
- }
- // in main function
- #include <iostream>
- #include "Config.h"
- int main()
- {
- CConfig MyConfig;
- MyConfig.AddKey(_T("ID"),_T("123456"));
- MyConfig.AddKey(_T("账户"),_T("123456"),_T("MySection"));
- MyConfig.AddKey(_T("余额"),_T("654321"),_T("MySection"));
- //MyConfig.DeleteKey(_T("ID"));
- //MyConfig.DeleteSection();
- LPCTSTR key=_T("ID");
- LPCTSTR key1=_T("账户");
- LPCTSTR key2=_T("余额");
- TCHAR szBuf[MAX_PATH]={0};
- LPTSTR pstrValue=szBuf;
- int nValue=0;
- MyConfig.ReadKeyValue(key,nValue);
- std::cout << "ID=" << nValue << std::endl;
- MyConfig.ReadKeyValue(key1,nValue,_T("MySection"));
- std::cout << "账户=" << nValue << std::endl;
- MyConfig.ReadKeyValue(key2,nValue,_T("MySection"));
- std::cout << "余额=" << nValue << std::endl;
- MyConfig.ModifyKeyValue(_T("余额"),_T("923475632"),_T("MySection"));
- MyConfig.ReadKeyValue(key2,nValue,_T("MySection"));
- std::cout << "余额=" << nValue << std::endl;
- std::cout << MyConfig.GetKeyCount(_T("MySection")) << std::endl;
- /*CConfig MyConfig2;
- MyConfig2.AddKey(_T("新增记录"),_T("4571498"));
- MyConfig2.AddKey(_T("新增记录"),_T("0775-4571498"));*/
- getchar();
- return 0;
- }
C++[类设计] ini配置文件读写类config的更多相关文章
- C# INI配置文件读写类
ini是一种很古老的配置文件,C#操作ini文件借助windows底层ini操作函数,使用起来很方便: public class IniHelper { [DllImport("kernel ...
- 【个人使用.Net类库】(1)INI配置文件操作类
开发接口程序时,对于接口程序配置的IP地址.端口等都需要是可配置的,而在Win Api原生实现了INI文件的读写操作,因此只需要调用Win Api中的方法即可操作INI配置文件,关键代码就是如何调用W ...
- [IO] C# INI文件读写类与源码下载 (转载)
/// <summary> /// 类说明:INI文件读写类. /// 编 码 人:苏飞 /// 联系方式:361983679 /// 更新网站:[url]http://www.sufei ...
- c#通用配置文件读写类(xml,ini,json)
.NET下编写程序的时候经常会使用到配置文件.配置文件格式通常有xml.ini.json等几种,操作不同类型配置文件需要使用不同的方法,操作较为麻烦.特别是针对同时应用不同格式配置文件的时候,很容易引 ...
- c#通用配置文件读写类与格式转换(xml,ini,json)
.NET下编写程序的时候经常会使用到配置文件.配置文件格式通常有xml.ini.json等几种,操作不同类型配置文件需要使用不同的方法,操作较为麻烦.特别是针对同时应用不同格式配置文件的时候,很容易引 ...
- C# ini配置文件操作类
/// <summary> /// INI文件操作类 /// </summary> public class IniFileHelper { /// <summary&g ...
- C# 如何实现完整的INI文件读写类
作者: 魔法软糖 日期: 2020-02-27 引言 ************************************* .ini 文件是Initialization File的缩写,即配置文 ...
- Qt的QSettings类和.ini文件读写
Detailed Description QSettings类提供了持久的跨平台的应用程序设置.用户通常期望应用程序记住它的设置(窗口大小.位置等)所有会话.这些信息通常存储在Windows系统注册表 ...
- 【转】ini载入保存类,操作INI配置文件方便的很
/****************************************************************** * * ^_^ 恶猫 独门商标 挖哈哈 * * QQ:\> ...
随机推荐
- 关于idea激活
1.在线激活 https://www.iteblog.com/idea/ 使用可访问:http://idea.iteblog.com/ 或者 http://idea.lanyus.com/ ht ...
- MyBatis学习笔记(2)——缓存
一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session flush或 close之后,该Session 中的所有Cache将被清空 二级缓存 ...
- js 实现 C# 的 format 方法
2014-11-08 12:18:51 更新,修复原形链方法被当作关键词的bug,其实之前是想用全局关键词的,不过还是算了,array里有太多单词了. ...
- mysql主从复制 (超简单) 转载
怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql 1.3.修改root的密码 ...
- 12100 Printer Queue(优先队列)
12100 Printer Queue12 The only printer in the computer science students’ union is experiencing an ex ...
- Node.js 入门(2)
1.http 请求 //调用Node.js自带的http模块 var http = require("http"); //调用http模块提供的函数createServer htt ...
- keil优化等级设置
附表:Keil C51中的优化级别及优化作用 级别说明 0 常数合并:编译器预先计算结果,尽可能用常数代替表达式.包括运行地址计算. 优化简单访问:编译器优化访问8051系统的内部数据和位地址. 跳转 ...
- VC++大数据量绘图时无闪烁刷屏技术实现(我的理解是,在内存上作画,然后手动显示,而不再直接需要经过WM_PAINT来处理了)
http://hantayi.blog.51cto.com/1100843/383578 引言 当我们需要在用户区显示一些图形时,先把图形在客户区画上,虽然已经画好但此时我们还无法看到,还要通过 程序 ...
- org.elasticsearch.bootstrap : JNA not found. native methods will be disabled
在pom.xml中添加以下依赖,解决elasticsearch的WARN: <dependency> <groupId>com.sun.jna</groupId> ...
- LD1-B(最短路径-SPFA)
题目链接 /* *题目大意: *给定v个点的重量,并给定e条边,每条边具有一个权值; *在e条边中选v-1条边使这v个点成为一棵树; *定义这棵树的代价为(每棵子树节点重量和其子树根到父节点的边的权值 ...