MFC总结(7)--- 操作Ini文件 操作
来源:互联网 发布:大闹天宫进阶数据 编辑:程序博客网 时间:2024/06/06 01:18
1、建立一个操作Ini文件的类,将操作ini文件的相关方法都封装到该类中
MyIniClass.h文件
#pragma once#include <vector>using std::vector;class CMyIniClass{public:CMyIniClass();virtual ~CMyIniClass();// 设置ini文件路径// 成功返回TRUE;否则返回FALSEBOOL SetPath(CString strPath);// 检查section是否存在// 存在返回TRUE;否则返回FALSEBOOL SectionExist(CString strSection);// 从指定的Section和Key读取KeyValue// 返回KeyValueCString GetKeyValue(CString strSection,CString strKey);// 设置Section、Key以及KeyValue,若Section或者Key不存在则创建void SetKeyValue(CString strSection,CString strKey,CString strKeyValue);// 删除指定Section下的一个Keyvoid DeleteKey(CString strSection,CString strKey);// 删除指定的Section以及其下的所有Keyvoid DeleteSection(CString strSection);// 获得所有的Section// 返回Section数目int GetAllSections(CStringArray& strArrSection);// 根据指定Section得到其下的所有Key和KeyValue// 返回Key的数目int GetAllKeysAndValues(CString strSection,CStringArray& strArrKey,CStringArray& strArrKeyValue);// 删除所有Sectionvoid DeleteAllSections();//初始化信息void initIniFile(LPCTSTR path);//获取指定ini中节中所有的valuevoid getValue(CString strPath, CString strSections);//返回vectorvector<CString> getValueVctr();void getSysCurName(CString & strName);private:// ini文件路径CString m_strPath;vector<CString> m_valueVctr;};
#include "stdafx.h"#include "MyIniClass.h"#define MAX_SECTION 260 //Section最大长度#define MAX_KEY 260 //KeyValues最大长度#define MAX_ALLSECTIONS 65535 //所有Section的最大长度#define MAX_ALLKEYS 65535 //所有KeyValue的最大长度CMyIniClass::CMyIniClass() : m_valueVctr(NULL){}CMyIniClass::~CMyIniClass(){}//////////////////////////////////////////////////////////////////////////// Public Functions//////////////////////////////////////////////////////////////////////////BOOL CMyIniClass::SetPath(CString strPath){m_strPath = strPath;// 检查文件是否存在DWORD dwFlag = GetFileAttributes((LPCTSTR)m_strPath);// 文件或者路径不存在,返回FALSEif (0xFFFFFFFF == dwFlag)return FALSE;// 路径是目录,返回FALSEif (FILE_ATTRIBUTE_DIRECTORY & dwFlag)return FALSE;return TRUE;}BOOL CMyIniClass::SectionExist(CString strSection){TCHAR chSection[MAX_SECTION];DWORD dwRetValue;dwRetValue = GetPrivateProfileString((LPCTSTR)strSection,NULL,_T(""),chSection,sizeof(chSection) / sizeof(TCHAR),(LPCTSTR)m_strPath);return (dwRetValue > 0);}CString CMyIniClass::GetKeyValue(CString strSection,CString strKey){TCHAR chKey[MAX_KEY];DWORD dwRetValue;CString strKeyValue = _T("");dwRetValue = GetPrivateProfileString((LPCTSTR)strSection,(LPCTSTR)strKey,_T(""),chKey,sizeof(chKey) / sizeof(TCHAR),(LPCTSTR)m_strPath);strKeyValue = chKey;return strKeyValue;}void CMyIniClass::SetKeyValue(CString strSection,CString strKey,CString strKeyValue){WritePrivateProfileString((LPCTSTR)strSection,(LPCTSTR)strKey,(LPCTSTR)strKeyValue,(LPCTSTR)m_strPath);}void CMyIniClass::DeleteKey(CString strSection, CString strKey){WritePrivateProfileString((LPCTSTR)strSection,(LPCTSTR)strKey,NULL, // 这里写NULL,则删除Key(LPCTSTR)m_strPath);}void CMyIniClass::DeleteSection(CString strSection){WritePrivateProfileString((LPCTSTR)strSection,NULL,NULL, // 这里都写NULL,则删除Section(LPCTSTR)m_strPath);}int CMyIniClass::GetAllSections(CStringArray& strArrSection){int dwRetValue, i, j, iPos = 0;TCHAR chAllSections[MAX_ALLSECTIONS];TCHAR chTempSection[MAX_SECTION];ZeroMemory(chAllSections, MAX_ALLSECTIONS);ZeroMemory(chTempSection, MAX_SECTION);dwRetValue = GetPrivateProfileSectionNames(chAllSections,MAX_ALLSECTIONS,m_strPath);// 因为Section在数组中的存放形式为“Section1”,0,“Section2”,0,0。// 所以如果检测到连续两个0,则breakfor (i = 0; i < MAX_ALLSECTIONS; i++){if (chAllSections[i] == NULL){if (chAllSections[i] == chAllSections[i + 1])break;}}i++; // 保证数据读完strArrSection.RemoveAll(); // 清空数组for (j = 0; j < i; j++){chTempSection[iPos++] = chAllSections[j];if (chAllSections[j] == NULL){strArrSection.Add(chTempSection);ZeroMemory(chTempSection, MAX_SECTION);iPos = 0;}}return strArrSection.GetSize();}int CMyIniClass::GetAllKeysAndValues(CString strSection,CStringArray& strArrKey,CStringArray& strArrKeyValue){int dwRetValue, i, j, iPos = 0;TCHAR chAllKeysAndValues[MAX_ALLKEYS];TCHAR chTempkeyAndValue[MAX_KEY];CString strTempKey;ZeroMemory(chAllKeysAndValues, MAX_ALLKEYS);ZeroMemory(chTempkeyAndValue, MAX_KEY);dwRetValue = GetPrivateProfileSection(strSection,chAllKeysAndValues,MAX_ALLKEYS,m_strPath);// 因为Section在数组中的存放形式为“Key1=KeyValue1”,0,“Key2=KeyValue2”,0// 所以如果检测到连续两个0,则breakfor (i = 0; i < MAX_ALLSECTIONS; i++){if (chAllKeysAndValues[i] == NULL){if (chAllKeysAndValues[i] == chAllKeysAndValues[i + 1])break;}}i++;strArrKey.RemoveAll();strArrKeyValue.RemoveAll();for (j = 0; j < i; j++){chTempkeyAndValue[iPos++] = chAllKeysAndValues[j];if (chAllKeysAndValues[j] == NULL){strTempKey = chTempkeyAndValue;strArrKey.Add(strTempKey.Left(strTempKey.Find('=')));strArrKeyValue.Add(strTempKey.Mid(strTempKey.Find('=') + 1));ZeroMemory(chTempkeyAndValue, MAX_KEY);iPos = 0;}}return strArrKey.GetSize();}void CMyIniClass::DeleteAllSections(){int nSecNum;CStringArray strArrSection;nSecNum = GetAllSections(strArrSection);for (int i = 0; i < nSecNum; i++){WritePrivateProfileString((LPCTSTR)strArrSection[i],NULL,NULL,(LPCTSTR)m_strPath);}}/************************************************************************//* 函数名称:getValue/* 函数功能:讲获取到的数据封装到成员变量vector中/* 参数1:ini文件路径/* 参数2:section名称/* 返回值:/* 说明:/************************************************************************/void CMyIniClass::getValue(CString strPath, CString strSections){CMyIniClass file;CStringArray arrSection, arrKey, arrkeyValue;//file.SetPath(L".\\myfile.ini");file.SetPath(strPath);CString str = L"";if (file.SectionExist(strSections)){// //得到所有section// int num = file.GetAllSections(arrSection);// str = "";// for (int i = 0; i < num; i++)// {// str += arrSection[i] + L" ";//str="student computer ";// }//得到所有Key和KeyValueint num = file.GetAllKeysAndValues(strSections, arrKey, arrkeyValue);str = L"";for (int j = 0; j < num; j++){//arrKey保存了computer下所有的Key//arrkeyValue保存了computer下所有的KeyValue//str = arrKey[j];str = arrkeyValue[j];m_valueVctr.push_back(str);}}}vector<CString> CMyIniClass::getValueVctr(){return m_valueVctr;}void CMyIniClass::initIniFile(LPCTSTR path){//::WritePrivateProfileStringW(_T("WINDOWS_DELETE"), _T("wintemp"), _T("c:\\windows\\temp"), _T(".\\myIni.ini"));//获取当前的系统登陆的用户名CString strName;getSysCurName(strName);//拼接用户临时文件CString strUserTemp;strUserTemp.Format(_T("C:\\Users\\%s\\AppData\\Local\\Temp"), strName);//拼接浏览器历史记录CString strBroTemp;strBroTemp.Format(_T("C:\\Users\\%s\\AppData\\Local\\Microsoft\\Windows\\Temporary Internet Files"), strName);::WritePrivateProfileStringW(_T("WINDOWS_DELETE"), _T("wintemp"), _T("C:\\windows\\temp"), path);::WritePrivateProfileStringW(_T("WINDOWS_DELETE"), _T("usertemp"), strUserTemp, path);::WritePrivateProfileStringW(_T("BROWSER_DELETE"), _T("browsertemp"), strBroTemp, path);}/************************************************************************//* 函数名称:getSysCurName/* 函数功能: 获取当前登陆用户名/* 参数1:/* 参数2:/* 返回值:/* 说明:/************************************************************************/void CMyIniClass::getSysCurName(CString & strName){WCHAR UserName[MAX_PATH];//CString StrUserName;DWORD Size = MAX_PATH;::GetUserName(UserName, &Size);strName.Format(L"%s ", UserName);}
//判断ini配置文件是否存在 不存在则创建CString path = _T(".\\myIni.ini");if (!m_IniFile.SectionExist(path)){m_IniFile.initIniFile(path);}
也可以使用如下进行测试
void CMFCApplication1Dlg::OnBnClickedButton1(){ CIniFile file; CStringArray arrSection, arrKey, arrkeyValue; file.SetPath("f:\\ myfile.ini"); CString str=""; if(file.SectionExist("student")) { //str="15" str = file.GetKeyValue("student", "female"); //设置number为50 file.SetKeyValue("student", "number", "50"); //因为在student中computer_num不存在,所以增加一项 file.SetKeyValue("student", "computer_num", "30"); //得到所有section int num = file.GetAllSections(arrSection); str = ""; for(int i=0; i<num; i++) { str += arrSection[i] + " ";//str="student computer "; } //得到所有Key和KeyValue int num = file.GetAllKeysAndValues("computer", arrKey, arrkeyValue); str = ""; for(int j=0; j<num; j++) { //arrKey保存了computer下所有的Key //arrkeyValue保存了computer下所有的KeyValue str = arrKey[j]; str = arrkeyValue[j]; } //删除student下的computer_num file.DeleteKey("student", "computer_num"); //删除student file.DeleteSection("student"); } }
0 0
- MFC总结(7)--- 操作Ini文件 操作
- MFC总结(6)--- 操作Ini文件 简介
- VC/MFC 操作INI文件
- VC/MFC 操作ini文件
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC操作ini文件方法
- MFC中对INI文件的读写操作总结
- VC操作INI文件 ,INI文件操作总结,如何操作INI文件,INI文件使用方法小结
- Spring3中的@value注解
- 二分查找(两行代码)
- Response.Write Table 方式导出Excel 添加样式
- nrf51822 app_timer
- javascript 定时器工作原理
- MFC总结(7)--- 操作Ini文件 操作
- * daemon not running. starting it now * ADB server didn't ACK * failed to start daemon *
- ViewPager轮播效果
- 关于 PreparedStatement 返回值的问题
- Android开发UI之隐藏系统状态栏
- DVR SNAT避免东西向流量的一种方案
- mysql常用doc命令大全
- Xcode 6制作动态及静态Framework
- Android Appium Server从启动到case完成的活动分析