C语言读取INI配置文件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言读取INI配置文件
Ini.h
#pragma once
#include"afxTempl.h"
class DLLPORT CIni
{
private:
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;i TRACE("%s\n",arrSection[i]); */ /*枚举全部键名及值 CStringArray arrKey,arrValue; n=ini.GetKeyValues(arrKey,arrValue,"段1"); for(int i=0;i TRACE("键:%s\n值:%s\n",arrKey[i],arrValue[i]); */ /*删除键值 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 lpTemp[MAX_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; else return GetLastError(); } CString CIni::GetValue(LPCTSTR lpSection, LPCTSTR lpKey) { DWORD dValue; TCHAR lpValue[MAX_PATH] = { 0 }; dValue = GetPrivateProfileString(lpSection, lpKey, "", lpValue, MAX_PATH, m_strFileName);