-
C++[类设计] ini配置文件读写类config
- #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);
- };
- #include "Config.h"
- 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(::PathIsDirectory(strFilePath))
- {
- _tcscpy_s(m_szFilePath,MAX_PATH,strFilePath);
- ::PathRemoveBackslash(m_szFilePath);
- ::PathAddBackslash(m_szFilePath);
- }
- else
- {
- ::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)
- {
- }
- 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;
- }
- 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;
- }
- 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;
- }
-
- 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;
- }
- 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;
- }
- 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;
- }
- 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;
- }
- 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;
- }
- #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"));
-
-
- 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;
-
-
- getchar();
- return 0;
- }
-
相关阅读:
关系型数据库性能优化总结(转载)
分区视图(转载)
硬盘Raid
AutoFac
OSI各层的功能和主要协议(转载)
Squid
Nginx+Windows负载均衡(转载)
Mysql命令alter add:增加表的字段
Delphi调用WebService(通过SoapHeader认证)经验总结
Delphi开发OCX详细步骤总结
-
原文地址:https://www.cnblogs.com/lvdongjie/p/4619100.html
Copyright © 2020-2023
润新知