VC++操作INI配置文件的实现

合集下载

VB读写INI文件

VB读写INI文件

VB读写INI文件今天,我们将应用制作一个能够实现读写INI文件的应用程序。

程序运行结果如图所示。

运行结果技术要点●INI文件的格式●GetPrivateProfileInt()和GetPrivateProfileString()函数●WritePrivateProfileString()函数实现步骤■新建项目打开Visual ,选择“新建项目”,在项目类型窗口中选择“Visual Basic项目”,在模板窗口中,选择“Windows应用程序”,在名称域中输入“RWIni”,然后选择保存路径。

单击“确认”。

■添加控件和菜单向当前窗体上添加两个Button控件,用于控制读写INI文件;一个Group控件和两个RadioButton控件,用于控制读写整型数据还是字符串型;三个Label控件和三个TextBox 控件,用于标注和输入节名、键名和值;其余两个Label控件,一个表示当前打开的文件名,另一个表示读写的状态。

最后添加一个MainMenu控件,生成菜单“文件”、“退出”,其中“文件”下有一个子菜单“打开INI文件”。

■设置属性切换到“属性栏”,对窗体上的控件设置属性。

详细情况见下表。

窗体各控件的属性值知识点:一个INI文件由若干节(Section)组成,每个节中又由若干个关键字(Keyword)和值组成。

关键字是用来保存独立的程序设置和那些重要信息的,用于控制应用程序的某个功能;值可以是整型数或字符串。

如果值为空,则表示应用程序已经为该关键字指定了缺省值。

INI文件的一般形式如下:…………[Section]keyword=value…………INI文件有严格的格式要求:(1)节名必须加“[”和“]”。

(2)对文件做注释,要以“;”开头。

(3)关键字后必须有“=”。

■添加代码keywordinfo = txtkeyword.TextValueinfo = txtvalue.Text' 检查输入是否合法,不合法时,提示警告信息。

C语言读取写入ini配置文件的方法实现

C语言读取写入ini配置文件的方法实现

C语⾔读取写⼊ini配置⽂件的⽅法实现⽬录⼀、了解什么是INI⽂件?⼆、INI⽂件的格式三、解析上述⽂件四、测试如下⼀、了解什么是INI⽂件?ini ⽂件是Initialization File的缩写,即初始化⽂件,这是⽤来配置应⽤软件以实现不同⽤户的要求。

⼆、INI⽂件的格式INI⽂件由节、键、值组成。

⼀个简单的的INI⽂件例⼦如下:[Setting]INIT_FLAG=0;VOLUME=1;LANGUAGE=1;如上例⼦,[Setting]就是节,=号左边的值是键,=号右边的是值。

三、解析上述⽂件/*ini.h*/#ifndef INI_H#define INI_H#include <stdio.h>#include <string.h>int GetIniKeyString(char *title,char *key,char *filename,char *buf);int PutIniKeyString(char *title,char *key,char *val,char *filename);#endif /*INI_H*//*ini.c*/#include <stdio.h>#include <string.h>/** 函数名: GetIniKeyString* ⼊⼝参数: title* 配置⽂件中⼀组数据的标识* key* 这组数据中要读出的值的标识* filename* 要读取的⽂件路径* 返回值:找到需要查的值则返回正确结果 0* 否则返回-1*/int GetIniKeyString(char *title,char *key,char *filename,char *buf){FILE *fp;int flag = 0;char sTitle[64], *wTmp;char sLine[1024];sprintf(sTitle, "[%s]", title);if(NULL == (fp = fopen(filename, "r"))) {perror("fopen");return -1;}while (NULL != fgets(sLine, 1024, fp)) {// 这是注释⾏if (0 == strncmp("//", sLine, 2)) continue;if ('#' == sLine[0]) continue;wTmp = strchr(sLine, '=');if ((NULL != wTmp) && (1 == flag)) {if (0 == strncmp(key, sLine, strlen(key))) { // 长度依⽂件读取的为准sLine[strlen(sLine) - 1] = '\0';fclose(fp);while(*(wTmp + 1) == ' '){wTmp++;}strcpy(buf,wTmp + 1);return 0;}} else {if (0 == strncmp(sTitle, sLine, strlen(sTitle))) { // 长度依⽂件读取的为准flag = 1; // 找到标题位置}}}fclose(fp);return -1;}/** 函数名: PutIniKeyString* ⼊⼝参数: title* 配置⽂件中⼀组数据的标识* key* 这组数据中要读出的值的标识* val* 更改后的值* filename* 要读取的⽂件路径* 返回值:成功返回 0* 否则返回 -1*/int PutIniKeyString(char *title,char *key,char *val,char *filename){FILE *fpr, *fpw;int flag = 0;char sLine[1024], sTitle[32], *wTmp;sprintf(sTitle, "[%s]", title);if (NULL == (fpr = fopen(filename, "r")))return -1;// 读取原⽂件sprintf(sLine, "%s.tmp", filename);if (NULL == (fpw = fopen(sLine, "w")))return -1;// 写⼊临时⽂件while (NULL != fgets(sLine, 1024, fpr)) {if (2 != flag) { // 如果找到要修改的那⼀⾏,则不会执⾏内部的操作wTmp = strchr(sLine, '=');if ((NULL != wTmp) && (1 == flag)) {if (0 == strncmp(key, sLine, strlen(key))) { // 长度依⽂件读取的为准flag = 2;// 更改值,⽅便写⼊⽂件sprintf(wTmp + 1, " %s\n", val);}} else {if (0 == strncmp(sTitle, sLine, strlen(sTitle))) { // 长度依⽂件读取的为准flag = 1; // 找到标题位置}}}fputs(sLine, fpw); // 写⼊临时⽂件}fclose(fpr);fclose(fpw);sprintf(sLine, "%s.tmp", filename);return rename(sLine, filename);// 将临时⽂件更新到原⽂件}上述两个函数是简单的解析函数,因为ini⽂件有很多种解析⽅式,根据不同的需求解析也不同所以要进⾏修改⽐如我的注释符号是 “ ;”,所以我需要修改并且根据实际功能需求也可以进⾏进⼀步的封装四、测试如下ini样本⽂件/*test.ini*/[city]beijing = hello-beijingshanghai = hello-shanghai#information[study]highschool = xxxxuniversity = yyyytest.c程序/*test.c*/#include "ini.h"#include <stdio.h>int main(int argc, char const *argv[]){char buff[100];int ret;ret = GetIniKeyString("city","beijing","./test.ini",buff);printf("ret:%d,%s\n",ret,buff);ret = GetIniKeyString("study","highschool","./test.ini",buff);printf("ret:%d,%s\n",ret,buff);ret = PutIniKeyString("study","highschool","zzzz","./test.ini");printf("put ret:%d\n",ret);ret = GetIniKeyString("study","highschool","./test.ini",buff);printf("ret:%d,%s\n",ret,buff);return 0;}结果如下:ret:0,hello-beijingret:0,xxxxput ret:0ret:0,zzzz相应的test.ini的study段highschool项变成了zzzz.这⾥还要注意,section使⽤中⽂字符可能会⽆法识别!到此这篇关于C语⾔读取写⼊ini配置⽂件的⽅法实现的⽂章就介绍到这了,更多相关C语⾔读取写⼊ini 内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

VC++读写软件配置参数的若干方法

VC++读写软件配置参数的若干方法
n me v le a = a 。节 ( c o )是 I I 件 的 另外 一个 基 本 元 素 ,作 u s tn ei N 文
参 数 设 置 是 软 件 的 一 项 常见 功 能 。通 过 记 录 配 置 参 数 ,可 免 去 每次 输入 参 数 的不便 ,使软 件 操作 更 为 简便 。 因此 ,读写 软
用 是 将 属 性 相 同 的 参 数 包 含 起 来 。 节 名 可 由 任 意 英 文 字 符 组
成 ,需 独 占一 行 ,
“ 千静 听 ”则 记 录 了 当前 选 择 的 播放 模 式 等 。记 录 软件 配 置 参 千
计 算机 ,配 置 参 数仍 然 能 保 留 下来 。 ( )将 参 数 写入 系 统 注 册 2
表 ,该 方法 的优 点 在 于无 论 软件 安装 在计 算 机 中 的任 何路 径 ,配 置参 数 均能 正确 读 取 。最 常 见 的应用 是 软件 使 用次 数 限制 ,一 种 简单 的 实现 方法 如 下 :安装 软 件 时 ,将可 用 次数 写 入 系统 注册 表 ( 入前 判 断是 否 已经存 在 ,存 在 则 不 写入 ) 写 ,软 件 每 启 动 一 次将
格 式 如 下 : 『et n a ] Sci N me。注 意 ,节 并 不 支 持 嵌 套 , 即 节 中 o
不 能 包 含 节 。读 写参 数 时 ,需 使 用 节 名 访 问 。 通 常 ,一 个 节 并
没 有 明 确 的 结 束标 志 .一 般 认 为 在 下 一 个 节 声 明 前 或 文 件 结 尾 处 是 节 的 结 束 。 I I 件 的 另 外 一 个 元 素 是 注 释 (o met 。 N 文 C m ns ) 它 以 分 号 “” 开 始 ,直 到 该 行 结 束 ,之 间 的 文 字 被 认 为 是 注 ; 释信 息 ,将 被 忽略 处 理 ,具 体 格 式 为 “ 注 释 信 息 ” ; 。

C#读写ini文件详解

C#读写ini文件详解

我现在介绍的是系统处理INI的方法.
虽然C#中没有,但是在"kernel32.dll"这个文件中有Win32的API函数--WritePrivateProfileString()和GetPrivateProfileString()
C#读写ini文件实现之C#声明INI文件的写操作函数WritePrivateProfileString():
[Section1]
KeyWord1 = Value1
KeyWord2 = Value2
...
[Section2]
KeyWord3 = Value3
KeyWord4 = Value4
C#读写ini文件最初的想法:C#命名空间中没有直接读写INI的类,当然如果你把INT当成文本文件用System.IO类来读写算我没说.
public INIClass(string INIPath)
{
inipath = INIPath;
}
/// ﹤﹥
/// 写入INI文件
/// ﹤/summary﹥
/// ﹤param name="Section"﹥项目名称(如 [TypeName] )﹤/param﹥
/// ﹤param name="Key"﹥键﹤/param﹥
/// ﹤param name="Value"﹥值﹤/param﹥
public void IniWriteValue(string Section,string Key,string Value)
{
WritePrivateProfileString(Section,Key,Value,this.inipath);

c读取配置文件的方法

c读取配置文件的方法

c读取配置文件的方法在C语言中,读取配置文件是一项非常常见的任务。

配置文件通常包含了程序运行时需要的各种参数和设置,因此读取配置文件是程序启动时必须完成的任务之一。

本文将介绍如何使用C语言读取配置文件。

我们需要了解配置文件的格式。

配置文件通常是一个文本文件,其中包含了一系列的键值对。

每个键值对由一个键和一个值组成,中间用等号连接。

例如:```key1=value1key2=value2key3=value3```在C语言中,我们可以使用标准库中的fopen函数打开配置文件。

例如:```cFILE *fp = fopen("config.ini", "r");```这里我们打开了一个名为config.ini的文件,并以只读模式打开。

接下来,我们可以使用标准库中的fgets函数逐行读取配置文件。

例如:```cchar line[256];while (fgets(line, sizeof(line), fp)) {// 处理每一行}```这里我们定义了一个长度为256的字符数组line,然后使用fgets 函数逐行读取配置文件。

fgets函数的第一个参数是一个字符数组,用于存储读取到的行;第二个参数是字符数组的长度;第三个参数是文件指针,用于指定要读取的文件。

接下来,我们需要解析每一行的键值对。

我们可以使用标准库中的strtok函数将每一行按照等号分割成键和值。

例如:```cchar *key = strtok(line, "=");char *value = strtok(NULL, "=");```这里我们使用strtok函数将line按照等号分割成两个部分,分别是键和值。

strtok函数的第一个参数是要分割的字符串;第二个参数是分割符,这里是等号。

strtok函数会返回分割后的第一个部分,我们可以使用NULL作为第一个参数来获取分割后的第二个部分。

VC6.0 MFC 读写配置文件

VC6.0 MFC 读写配置文件

MFC读写ini配置文件Email:liping_xiong@1.新建头文件如:ini.h,在编辑区域粘贴以下内容://///////////////////////////////////////////////////////////////////////// ini.h: interface for the Cini class.#if !defined(AFX_OPINI_H__CE3F8B7B_1ACA_46CC_A91C_F8E23FA9B063__INCLUDED _)#define AFX_OPINI_H__CE3F8B7B_1ACA_46CC_A91C_F8E23FA9B063__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include <afxwin.h>class Cini{public:static DWORD ReadString (char *section, char * key, char stringtoread[], char * filename);static BOOL WriteString(LPCTSTR section, LPCTSTR key,char* stringtoadd, char*filename);Cini();virtual ~Cini();};#endif// !defined(AFX_OPINI_H__CE3F8B7B_1ACA_46CC_A91C_F8E23FA9B063__INCLUDED_)2.新建资源文件如:ini.cpp,在编辑区域黏贴以下内容://///////////////////////////////////////////////////////////////////////// ini.cpp: implementation of the Cini class.#include "stdafx.h"#include "ini.h"///////////////////////////////////////////////////////////////////////////Cini类的构造函数和析构函数Cini::Cini(){}Cini::~Cini(){}///////////////////////////////////////////////////////////////////////////写字符串到INI文件,GetLastError()函数用于返回写入失败void error(LPSTR lpszFunction){CHAR szBuf[80];DWORD dw = GetLastError();sprintf(szBuf, "%s failed: GetLastError returned %u\n",lpszFunction, dw);MessageBox(NULL, szBuf, "Error", MB_OK);ExitProcess(dw);}BOOL Cini::WriteString(LPCTSTR section, LPCTSTR key, char *stringtoadd, char *filename) {CHAR FilePath[255];GetModuleFileName(NULL,FilePath,255);(strrchr(FilePath,'\\'))[1] = 0;strcat(FilePath,filename);return ::WritePrivateProfileString(section,key,stringtoadd,FilePath);}///////////////////////////////////////////////////////////////////////////从INI文件中读取字符串DWORD Cini::ReadString(char *section, char * key, char stringtoread[], char * filename) {CHAR FilePath[255];GetModuleFileName(NULL,FilePath,255);(strrchr(FilePath,'\\'))[1] = 0;strcat(FilePath,filename);return ::GetPrivateProfileString(section, key,NULL,stringtoread,255,FilePath);}3.当程序加载的时候读配置文件:首先要在应用程序文件头部引用ini.h头文件如下:#include "ini.h"找到OnInitDialog()函数,在其下黏贴如下代码:// 保存ini各项值数组char szOption1[MAX_PATH];char szOption2[MAX_PATH];char szOption3[MAX_PATH];// 读取ini各项值Cini::ReadString("配置信息", "选项1", szOption1, "test.ini");Cini::ReadString("配置信息", "选项2", szOption2, "test.ini");Cini::ReadString("配置信息", "选项3", szOption3, "test.ini");m_strEdit1.Format("%s",szOption1);m_strEdit2.Format("%s",szOption2);m_strEdit3.Format("%s",szOption3);UpdateData(FALSE);说明:m_strEdit1,m_strEdit2,m_strEdit2是三个文本框对象的实例4.当卸载(关闭)程序的时候写配置文件;找到DestroyWindow()函数,在其下黏贴如下代码:UpdateData(TRUE);CString str1 = m_strEdit1;CString str2 = m_strEdit2;CString str3 = m_strEdit3;char *p1 = str1.GetBuffer(str1.GetLength()+1);char *p2 = str2.GetBuffer(str2.GetLength()+1);char *p3 = str3.GetBuffer(str3.GetLength()+1);Cini::WriteString("配置信息", "选项1", p1, "test.ini");Cini::WriteString("配置信息", "选项2", p2, "test.ini");Cini::WriteString("配置信息", "选项3", p3, "test.ini");说明:m_strEdit1,m_strEdit2,m_strEdit2是三个文本框对象的实例附工程视图及运行结果:Ini头文件Ini资源文件引用头文件引用头文件用户文件、应用程序文件对话框加载关闭对话框配置文件里的记录。

C++读取INI文件

C++读取INI文件

C++读取INI⽂件VC++中 3 个主要写⼊/读取配置⽂件ini的函数:bool WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);写⼊.ini⽂件;DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefaut,LPSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);读取.ini⽂件;UINT GetPrivateProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault,LPCTSTR lpFileName);读取整形值。

其中个参数的意思:LPCTSTR lpAppName ------- INI⽂件中的⼀个字段名LPCTSTR lpKeyName ------- lpAppName 下的⼀个键名,也就是⾥⾯具体的变量名LPCTSTR lpString ------- 是键值,也就是变量的值,必须为LPCTSTR或CString类型LPCTSTR lpFileName ------- 完整的INI⽂件路径名LPCTSTR lpDefaut ------- 如果没有其前两个参数值,则将此值赋给变量LPSTR lpReturnedString ------- 接收INI⽂件中的值的CString对象,即接收缓冲区DWORD nSize ------- 接收缓冲区的⼤⼩例⼦:CString StrName,Strtemp;int nAge;StrName = "jacky";nAge = 13;WritePrivateProfileString("Student","Name",StrName,"c:\\setting.ini");结果:(INI⽂件中显⽰如下:)[Student]Name=jacky读取:CString SName;GetPrivateProfileString("Student","Name","DefaultName",SName.GetBuffer(MAX_LENGTH),MAX_LENGTH,"c:\\setting.ini");结果:SName = "jacky";这⾥需要注意点就是⽤完GetBuffer函数后⼀定要释放(⽤SName.ReleaseBuffer()函数),不然后⾯再⽤到SName的其他⼦函数就会失灵。

vc读写配置文件方法

vc读写配置文件方法

vc 用函数读写INI配置文件ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。

ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。

读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。

一、向ini文件中写入信息的函数1. 把信息写入系统的win.ini文件BOOL WriteProfileString(LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。

若为NULL,则删除整个节LPCTSTR lpString // 键的值,是一个以0结束的字符串。

若为NULL,则删除对应的键)2. 把信息写入自己定义的.ini文件BOOL WritePrivateProfileString(LPCTSTR lpAppName, // 同上LPCTSTR lpKeyName, // 同上LPCTSTR lpString, // 同上LPCTSTR lpFileName // 要写入的文件的文件名。

若该ini文件与程序在同一个目录下,也可使用相对//路径,否则需要给出绝度路径。

)如:::WriteProfileString("Test","id","xym");//在win.ini中创建一个Test节,并在该节中创建一个键id,其值为xym::WritePrivateProfileString("Test","id","xym","d:\\vc\\Ex1\\ex1.ini" );//在Ex1目录下的ex1.ini中创建一个Test节,并在该节中创建一个键id,其值为xym//若Ex1.ini文件与读写该文件的程序在同一个目录下,则上面语句也可写为:::WritePrivateProfileString("Test","id","xym",".\\ex1.ini");需要注意的是,C系列的语言中,转义字符'\\'表示反斜线'\'。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC++操作INI配置文件的实现修改浏览权限| 删除一.将信息写入.INI文件中.1.所用的WINAPI函数原型为:BOOL WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);其中各参数的意义:LPCTSTR lpAppName 是INI文件中的一个字段名.LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.LPCTSTR lpFileName 是完整的INI文件名.2.具体使用方法:设现有一名学生,需把他的姓名和年龄写入c:\stud\student.ini 文件中.CString strName,strTemp;int nAge;strName="张三";nAge=12;WritePrivateProfileString("StudentInfo","Name",strName,"c:\\stud\\student.ini");此时c:\stud\student.ini文件中的内容如下:[StudentInfo]Name=张三3.要将学生的年龄保存下来,只需将整型的值变为字符型即可:strTemp.Format("%d",nAge);WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\stud\\student.ini");二.将信息从INI文件中读入程序中的变量.1.所用的WINAPI函数原型为:DWORD GetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpDefault,LPTSTR lpReturnedString,DWORD nSize,LPCTSTR lpFileName);其中各参数的意义:前二个参数与WritePrivateProfileString中的意义一样.lpDefault : 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.lpReturnedString : 接收INI文件中的值的CString对象,即目的缓存器.nSize : 目的缓存器的大小.lpFileName : 是完整的INI文件名.2.具体使用方法:现要将上一步中写入的学生的信息读入程序中.CString strStudName;int nStudAge;GetPrivateProfileString("StudentInfo","Name","默认姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini");执行后strStudName 的值为:"张三",若前两个参数有误,其值为:"默认姓名".3.读入整型值要用另一个WINAPI函数:UINT GetPrivateProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault,LPCTSTR lpFileName);这里的参数意义与上相同.使用方法如下:nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini");三.循环写入多个值,设现有一程序,要将最近使用的几个文件名保存下来,具体程序如下:1.写入:CString strTemp,strTempA;int i;int nCount=6;file://共有6个文件名需要保存for(i=0;i<6;I++){strTemp.Format(_T("file%d"),i);//strTempA=文件名WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,_T("c:\\usefile\\usefile.ini")); }strTemp.Format("%d",nCount);::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");file://将文件总数写入,以便读出.2.读出:nCount=::GetPrivateProfileInt("FileCount","Count",0,"c:\\usefile\\usefile.ini");for(i=0;i<6;i++){strTemp.Format("%d",i);strTemp="FileName"+strTemp;GetPrivateProfileString("CurrentIni",strTemp,"default.fil",strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c:\\usefile\\usefile.ini");file://使用strTempA中的内容.}补充几点:1.INI文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回FALSE 值.2.文件名的路径中必须为\\ ,因为在VC++中, \\ 才表示一个\ .3.也可将INI文件放在程序所在目录,此时lpFileName 参数为: ".\\student.ini".//----------------------------------------------------------------------------------/*类名:CManageIni版本:v1类描述:本类可以于ini文件进行操作*/文件1: Manageini.h#pragma once#include "afxTempl.h"class 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();};文件2:manageini.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;elsereturn GetLastError();}CString CIni::GetValue(LPCTSTR lpSection, LPCTSTR lpKey){DWORD dValue;TCHAR lpValue[MAX_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 chSectionNames[MAX_ALLSECTIONS]={0}; //总的提出来的字符串TCHAR chSection[MAX_SECTION]={0}; //存放一个段名。

相关文档
最新文档