C语言读取INI配置文件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档