




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言读取INI配置文件Ini.h#pragma once#include afxTempl.hclass DLLPORT CIniprivate:CString m_strFileName;public:CIni(CString strFileName) :m_strFileName(strFileName)public:/一般性操作:BOOL SetFileName(LPCTSTR lpFileName); /设置文件名CString GetFileName(void); /获得文件名BOOL SetValue(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue, bool bCreate = true); /设置键值,bCreate是指段名及键名未存在时,是否创建。CString GetValue(LPCTSTR lpSection, LPCTSTR lpKey); /得到键值.BOOL DelSection(LPCTSTR strSection); /删除段名BOOL DelKey(LPCTSTR lpSection, LPCTSTR lpKey); /删除键名public:/高级操作:int GetSections(CStringArray& arrSection); /枚举出全部的段名int GetKeyValues(CStringArray& arrKey, CStringArray& arrValue, LPCTSTR lpSection); /枚举出一段内的全部键名及值BOOL DelAllSections();/*使用方法:CIni ini(c:a.ini);int n;/*获得值TRACE(%s,ini.GetValue(段1,键1);*/*添加值ini.SetValue(自定义段,键1,值);ini.SetValue(自定义段2,键1,值,false);*/*枚举全部段名CStringArray arrSection;n=ini.GetSections(arrSection);for(int i=0;in;i+)TRACE(%sn,arrSectioni);*/*枚举全部键名及值CStringArray arrKey,arrValue;n=ini.GetKeyValues(arrKey,arrValue,段1);for(int i=0;in;i+)TRACE(键:%sn值:%sn,arrKeyi,arrValuei);*/*删除键值ini.DelKey(段1,键1);*/*删除段ini.DelSection(段1);*/*删除全部ini.DelAllSections();*/Ini.cpp#include StdAfx.h#include Ini.h#define MAX_ALLSECTIONS 2048 /全部的段名#define MAX_SECTION 260 /一个段名长度#define MAX_ALLKEYS 6000 /全部的键名#define MAX_KEY 260 /一个键名长度BOOL CIni:SetFileName(LPCTSTR lpFileName)CFile file;CFileStatus status;if (!file.GetStatus(lpFileName, status)return TRUE;m_strFileName = lpFileName;return FALSE;CString CIni:GetFileName(void)return m_strFileName;BOOL CIni:SetValue(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue, bool bCreate)TCHAR lpTempMAX_PATH = 0 ;/以下if语句表示如果设置bCreate为false时,当没有这个键名时则返回TRUE(表示出错)/!*&*none-value*&!* 这是个垃圾字符没有特别意义,这样乱写是防止凑巧相同。if (!bCreate)GetPrivateProfileString(lpSection, lpKey, !*&*none-value*&!*, lpTemp, MAX_PATH, m_strFileName);if (strcmp(lpTemp, !*&*none-value*&!*) = 0)return TRUE;if (WritePrivateProfileString(lpSection, lpKey, lpValue, m_strFileName)return FALSE;elsereturn GetLastError();CString CIni:GetValue(LPCTSTR lpSection, LPCTSTR lpKey)DWORD dValue;TCHAR lpValueMAX_PATH = 0 ;dValue = GetPrivateProfileString(lpSection, lpKey, , lpValue, MAX_PATH, m_strFileName);return lpValue;BOOL CIni:DelSection(LPCTSTR lpSection)if (WritePrivateProfileString(lpSection, NULL, NULL, m_strFileName)return FALSE;elsereturn GetLastError();BOOL CIni:DelKey(LPCTSTR lpSection, LPCTSTR lpKey)if (WritePrivateProfileString(lpSection, lpKey, NULL, m_strFileName)return FALSE;elsereturn GetLastError();int CIni:GetSections(CStringArray& arrSection)/*本函数基础:GetPrivateProfileSectionNames - 从 ini 文件中获得 Section 的名称如果 ini 中有两个 Section: sec1 和 sec2,则返回的是 sec1,0,sec2,0,0 ,当你不知道ini 中有哪些 section 的时候可以用这个 api 来获取名称*/int i;int iPos = 0;int iMaxCount;TCHAR chSectionNamesMAX_ALLSECTIONS = 0 ; /总的提出来的字符串TCHAR chSectionMAX_SECTION = 0 ; /存放一个段名。GetPrivateProfileSectionNames(chSectionNames, MAX_ALLSECTIONS, m_strFileName);/以下循环,截断到两个连续的0for (i = 0; iMAX_ALLSECTIONS; i+)if (chSectionNamesi = 0)if (chSectionNamesi = chSectionNamesi + 1)break;iMaxCount = i + 1; /要多一个0号元素。即找出全部字符串的结束部分。arrSection.RemoveAll();/清空原数组for (i = 0; iiMaxCount; i+)chSectioniPos+ = chSectionNamesi;if (chSectionNamesi = 0)arrSection.Add(chSection);memset(chSection, 0, MAX_SECTION);iPos = 0;return (int)arrSection.GetSize();int CIni:GetKeyValues(CStringArray& arrKey, CStringArray& arrValue, LPCTSTR lpSection)/*本函数基础:GetPrivateProfileSection- 从 ini 文件中获得一个Section的全部键名及值名如果ini中有一个段,其下有 段1=值1 段2=值2,则返回的是 段1=值1,0,段2=值2,0,0 ,当你不知道获得一个段中的所有键及值可以用这个。*/int i;int iPos = 0;CString strKeyValue;int iMaxCount;TCHAR chKeyNamesMAX_ALLKEYS = 0 ; /总的提出来的字符串TCHAR chKeyMAX_KEY = 0 ; /提出来的一个键名GetPrivateProfileSection(lpSection, chKeyNames, MAX_ALLKEYS, m_strFileName);for (i = 0; iMAX_ALLKEYS; i+)if (chKeyNamesi = 0)if (chKeyNamesi = chKeyNamesi + 1)break;iMaxCount = i + 1; /要多一个0号元素。即找出全部字符串的结束部分。arrKey.RemoveAll();/清空原数组arrValue.RemoveAll();for (i = 0; iiMaxCount; i+)chKeyiPos+ = chKeyNamesi;if (chKeyNamesi = 0)strKeyValue = chKey;arrKey.Add(strKeyValue.Left(strKeyValue.Find(=);arrValue.Add(strKeyValue.Mid(strKeyValue.Find(=) + 1);memset(chKey, 0, MAX_KEY);iPos = 0;re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025电工模考模拟试题含完整答案详解【名校卷】
- 中信银行淄博市张店区2025秋招面试典型题目及参考答案
- 兴业银行广州市海珠区2025秋招笔试专业知识题专练及答案
- 农发行荆州市荆州区2025秋招信息科技岗笔试题及答案
- 2025年导游资格考试预测复习及参考答案详解(达标题)
- 2025年中考数学总复习《分式》考前冲刺练习附答案详解【综合题】
- 黑龙江省2025黑龙江东北农业大学管理人员招聘11人笔试历年参考题库附带答案详解
- 2025年云南昆明市公安局晋宁分局第一批补缺招聘勤务辅警36人笔试高频难、易错点备考题库及答案详解一套
- 厦门市2025中共福建厦门市委金融委员会办公室招聘1人笔试历年参考题库附带答案详解
- 基础强化自考专业(行政管理)及完整答案【易错题】
- 电池厂化成柜安全操作规范规章
- 电力公司施工安全培训课件
- 2025年一级建造师《(市政公用工程)管理与实务》考试真题及答案
- 宏村简介课件
- 潍坊市2026届高三开学调研监测考试数学试题及答案
- 车辆产品公告管理办法
- 2025喀什经济开发区兵团分区招聘(10人)考试参考试题及答案解析
- 2025江西南昌市西湖城市建设投资发展集团有限公司及下属子公司招聘40人考试参考试题及答案解析
- 2024教科版一年级科学上册全册教案设计
- (2025秋新版)外研版八年级英语上册全册教案
- 汽车维修工具使用教学设计
评论
0/150
提交评论