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:\> ...
随机推荐
- UITableView-FDTemplateLayoutCell自动计算UITableView高度的使用
基本应用如果你有self-satisfied cell,那么你应该做的是:#import "UITableView+FDTemplateLayoutCell.h"- (CGFloa ...
- Linux硬盘命名和安装分区
硬盘命名: 硬盘命名基于文件,一般有如下文件方式: /dev/hda1 /dev/sdb3 具体含义如下: /dev:是所有设备文件存放的目录. hd和sd:他们是区别的前两个字母,代表该分区所在的设 ...
- 04_RHEL7.1忘记root密码
在开机进入启动项时,选择需要重设密码的那个启动项 按e进入编辑模式,找到rhgb和quiet参数(几乎在最下面),替换为 init=/bin/sh 按ctrl+X不需密码进入shell 以rw的方式重 ...
- sublime3 插件pylinter的安装
1.首先sublime需要安装package control,之后安装pylinter插件,并进行简单的属性配置(网上教程很多,略) 2.之后是pylint_path的配置,我参照网上的配置失败,su ...
- Uncaught SyntaxError: Unexpected end of input
js报错 原因:输入的意外终止…… 页面代码写的不规范啊……其中的某条语句,没有正常结束…… 或者部分语句“‘’”双引号,单引号没有配对好,被转义了之类的……错误造成的 代码: <script ...
- Destoon QQ互联一键登录审核不通过的解决方案
在QQ互联上申请帐号之后提交了审核, 后台填写APPID和KEY之后自己申请的QQ号可以正常登录,但QQ互联审核的时候一直审核不通过说是“您的网站审核未通过,原因是“点击QQ登录按钮提示登录失败或出现 ...
- jquery easy ui 学习 (7) TreeGrid Actions
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- KeyPress事件
在做一个小demo的时候,发现在文本框中输入一个数字,按下“+”,数字增加了,但是“+”仍旧存在的问题,解决方案:提前执行键盘press事件 private void txtNum_KeyPress( ...
- IOS笔记 1
< ![CDATA[ 笔记 UIWindows 与UIView的关系iOS的坐标系统视图层次结构视图坐标(Frame和Bounds区别)UIView的常用属性和方法坐标系统的变换UIView内容 ...
- CONTEXT MENU简介
安卓中的上下文菜单是通过长按控件元素触发的,要注意的是每次都会触发onCreateContextMenu方法: main.xml <?xml version="1.0" en ...