VC++操作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配置⽂件的⽅法实现⽬录⼀、了解什么是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++读写软件配置参数的若干方法
参 数 设 置 是 软 件 的 一 项 常见 功 能 。通 过 记 录 配 置 参 数 ,可 免 去 每次 输入 参 数 的不便 ,使软 件 操作 更 为 简便 。 因此 ,读写 软
用 是 将 属 性 相 同 的 参 数 包 含 起 来 。 节 名 可 由 任 意 英 文 字 符 组
成 ,需 独 占一 行 ,
“ 千静 听 ”则 记 录 了 当前 选 择 的 播放 模 式 等 。记 录 软件 配 置 参 千
计 算机 ,配 置 参 数仍 然 能 保 留 下来 。 ( )将 参 数 写入 系 统 注 册 2
表 ,该 方法 的优 点 在 于无 论 软件 安装 在计 算 机 中 的任 何路 径 ,配 置参 数 均能 正确 读 取 。最 常 见 的应用 是 软件 使 用次 数 限制 ,一 种 简单 的 实现 方法 如 下 :安装 软 件 时 ,将可 用 次数 写 入 系统 注册 表 ( 入前 判 断是 否 已经存 在 ,存 在 则 不 写入 ) 写 ,软 件 每 启 动 一 次将
格 式 如 下 : 『et n a ] Sci N me。注 意 ,节 并 不 支 持 嵌 套 , 即 节 中 o
不 能 包 含 节 。读 写参 数 时 ,需 使 用 节 名 访 问 。 通 常 ,一 个 节 并
没 有 明 确 的 结 束标 志 .一 般 认 为 在 下 一 个 节 声 明 前 或 文 件 结 尾 处 是 节 的 结 束 。 I I 件 的 另 外 一 个 元 素 是 注 释 (o met 。 N 文 C m ns ) 它 以 分 号 “” 开 始 ,直 到 该 行 结 束 ,之 间 的 文 字 被 认 为 是 注 ; 释信 息 ,将 被 忽略 处 理 ,具 体 格 式 为 “ 注 释 信 息 ” ; 。
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语言读取配置文件。
我们需要了解配置文件的格式。
配置文件通常是一个文本文件,其中包含了一系列的键值对。
每个键值对由一个键和一个值组成,中间用等号连接。
例如:```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 读写配置文件
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⽂件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 用函数读写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系列的语言中,转义字符'\\'表示反斜线'\'。
CC++关于如何读写ini配置文件(小结)
CC++关于如何读写ini配置⽂件(⼩结)我们可能经常⽤到配置⽂件ini⽂件来获取或者保存参数信息,在VC中其函数中主要⽤到的有:读取1. 读取字符DWORD GetPrivateProfileString(LPCTSTR lpAppName, // INI⽂件中的⼀个字段名[节名]可以有很多个节名LPCTSTR lpKeyName, // lpAppName 下的⼀个键名,也就是⾥⾯具体的变量名LPCTSTR lpDefault, // 如果lpReturnedString为空,则把个变量赋给lpReturnedStringLPTSTR lpReturnedString, // 存放键值的指针变量,⽤于接收INI⽂件中键值(数据)的接收缓冲区DWORD nSize, // lpReturnedString的缓冲区⼤⼩LPCTSTR lpFileName // INI⽂件的路径);2. 读取整型值 (返回值为读到的整)UINT GetPrivateProfileInt(LPCTSTR lpAppName, // INI⽂件中的⼀个字段名[节名]可以有很多个节名LPCTSTR lpKeyName, // lpAppName 下的⼀个键名,也就是⾥⾯具体的变量名INT nDefault, // 如果没有找到指定的数据返回,则把个变量值赋给返回值LPCTSTR lpFileName // INI⽂件的路径);写⼊1. 写⼊字符BOOL WritePrivateProfileString(LPCTSTR lpAppName, // INI⽂件中的⼀个字段名[节名]可以有很多个节名LPCTSTR lpKeyName, // lpAppName 下的⼀个键名,也就是⾥⾯具体的变量名LPCTSTR lpString, // 键值,也就是数据LPCTSTR lpFileName // INI⽂件的路径);2. 写⼊整型读写INI⽂件时相对路径和绝对路径都可以,根据实际情况选择 "..\\IniFileName.ini" // 这样的为相对路径 "D:\\IniFileName.ini" // 这样的为绝对路径MAX_PATH:是微软最⼤路径占的字节所设的宏 写⼊的ini⽂件分为:节、键名、键值 举个栗⼦: // XX.ini [串⼝配置] 波特率=19200有了理论,再看看实践的demo:写INI⽂件:LPTSTR lpPath = new char[MAX_PATH];strcpy(lpPath, "D:\\IniFileName.ini");WritePrivateProfileString("LiMing", "Sex", "Man", lpPath);WritePrivateProfileString("LiMing", "Age", "20", lpPath);WritePrivateProfileString("Fangfang", "Sex", "Woman", lpPath);WritePrivateProfileString("Fangfang", "Age", "21", lpPath);delete [] lpPath;INI⽂件如下:[LiMing]Sex=ManAge=20[Fangfang]Sex=WomanAge=21读INI⽂件:TCHAR FPath[128];::GetCurrentDirectory(MAX_PATH, FPath);strcat(FPath, ".\\Config.ini");CFile ConfigFile;if(!ConfigFile.Open(FPath, CFile::modeCreate||CFile::modeRead, NULL)){AfxMessageBox("打开Config.ini配置⽂件失败!!!");return FALSE;}ConfigFile.Close();LPTSTR lpPath = new char[MAX_PATH];LPTSTR LiMingSex = new char[6];int LiMingAge;LPTSTR FangfangSex = new char[6];int FangfangAge;strcpy(lpPath, "..\\IniFileName.ini");GetPrivateProfileString("LiMing", "Sex", "", LiMingSex, 6, lpPath);LiMingAge = GetPrivateProfileInt("LiMing", "Age", 0, lpPath);GetPrivateProfileString("Fangfang", "Sex", "", FangfangSex, 6, lpPath);FangfangAge = GetPrivateProfileInt("Fangfang", "Age", 0, lpPath);delete [] lpPath;配置⽂件中经常⽤到ini⽂件,在VC中其函数分别为:写⼊.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);读取整形值: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 的其他⼦函数就会失灵。
C#操作ini(读取、写入)
C#操作ini(读取、写⼊)C#操作ini(读取、写⼊)INI⽂件是⼀种按照特点⽅式排列的⽂本⽂件,该⽂件主要存放⽤户所做的选择以及系统的各种参数。
⽤户可以通过修改INI⽂件,来改变应⽤程序和系统的很多配置。
但⾃从Windows 95的退出,在Windows系统中引⼊了注册表的概念,INI⽂件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应⽤程序和系统都把许多参数和初始化信息放进了注册表中。
但在某些场合,INI⽂件还拥有其不可替代的地位。
INI⽂件的结构INI⽂件是⼀种按照特点⽅式排列的⽂本⽂件。
每⼀个INI⽂件构成都⾮常类似,由若⼲段落(section)组成,在每个带括号的标题下⾯,是若⼲个以单个单词开头的关键词(keyword)和⼀个等号,等号右边的就是关键字对应的值(value)。
其⼀般形式如下:[Section1] KeyWord1 = Valuel KeyWord2 = Value2 ...... [Section2] KeyWord3 = Value3 KeyWord4 = Value4[DllImport("kernel32")]private static extern int GetPrivateProfileString(string section, string key, string defVal, StringBuilder retVal, int size, string filePath);注:section:要读取的段落名key: 要读取的键defVal: 读取异常的情况下的缺省值retVal: key所对应的值,如果该key不存在则返回空值size: 值允许的⼤⼩filePath: INI⽂件的完整路径和⽂件名[DllImport("kernel32")]private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);注:section: 要写⼊的段落名key: 要写⼊的键,如果该key存在则覆盖写⼊val: key所对应的值filePath: INI⽂件的完整路径和⽂件名/// <summary>/// 读取INI⽂件/// </summary>/// <param name="section">项⽬名称(如 [section] )</param>/// <param name="skey">键</param>/// <param name="path">路径</param>public string IniReadValue(string section, string skey, string path){StringBuilder temp = new StringBuilder(500);int i = GetPrivateProfileString(section, skey, "", temp, 500, path);return temp.ToString();}/// <summary>/// 写⼊ini⽂件/// </summary>/// <param name="section">项⽬名称</param>/// <param name="key">键</param>/// <param name="value">值</param>/// <param name="path">路径</param>public void IniWrite(string section, string key, string value,string path) {WritePrivateProfileString(section, key, value, path); }测试://创建⼀个test.ini⽂件并在A段落写⼊姓名(key)=wlj(value)IniWrite("A","姓名","wlj","f:/test.ini")IniWrite("B","姓名","WZQ","f:/test.ini")test.ini⽂件的格式:ini模版:[A]姓名=wlj[B]姓名=WZQ//读取test.ini⽂件中A 段落键=姓名的值IniReadValue("A","姓名","f:/test.ini")//读取test.ini⽂件中A 段落中所有值IniReadValue("A",null,"f:/test.ini")//删除test.ini⽂件中A 段落中所有键(没有键,也就没有值了)IniWrite("A",null,null,"f:/test.ini")//删除test.ini⽂件中所有段落IniWrite(null,null,null,"f:/test.ini")。
VC++遍历INI文件
char strBuffer[128]; //临时缓冲区,用于接收字符串
char strSection[128]; //用于接收节点名称 #34;.\\UnitInfo.INI"); //INI文件位于VC++工程的根目录
//获取第一个节点名
结合MSDN对这几个函数的介绍,很容易想到的是,使用GetPrivateProfileSectionNames函数获取节点名称,以此作为参数给GetPrivateProfileString函数,读取第一个关键字名称,接着再读取该关键字下的值。代码如下:
char strSection[128];
WritePrivateProfileString(strSection,strUnitID,NULL,strFileName);
细心的您可能会问,怎么可以将配置文件信息都删除了,如此一来,程序下一次运行岂不是读不到信息?别急,在我们读完所需要的所有配置信息后,我们必须重建该配置文件。如何重建?只需循环调用WritePrivateProfileString函数。代码如下:
DWORD nChar = GetPrivateProfileSectionNames(strSection,sizeof(strSection),strFileName);
for (int i = 0; i < g_UnitNumber; i++)
{
//保存探头标识
nChar = GetPrivateProfileString(strSection,NULL,"",strBuffer,sizeof(strBuffer),strFileName);
g_UnitID[i] = strBuffer;
C#中读写INI配置文件
C#中读写INI配置文件
在作应用系统开发时,管理配置是必不可少的。
例如数据库服务器的配置、安装和更新配置等等。
由于Xm l的兴起,现在的配置文件大都是以xml文档来存储。
比如Visual 自身的配置文件Mashine.config,的配置文件Web.Config,包括我在介绍Rem oting中提到的配置文件,都是xm l的格式。
传统的配置文件ini已有被xml文件逐步代替的趋势,但对于简单的配置,ini文件还是有用武之地的。
ini文件其实就是一个文本文件,它有固定的格式,节Secti on的名字用[]括起来,然后换行说明key的值:
[section]
key=value
如数据库服务器配置文件:
DBServer.ini
[Server]
Nam e=localhost
[DB]
Nam e=NorthWind
using using using using
nam {
{
} }
Section参数、Key参数和IniFilePath不用再说,Value参数表明key的值,而这里的NoText 对应API函数的def参数,它的值由用户指定,是当在配置文件中没有找到具体的Value时,就用NoTex t的值来代替。
VB6.0实现读写配置文件(.ini文件)
VB6.0实现读写配置文件(*.ini文件)'声明:Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As LongDeclare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As LongDeclare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long'读写例子:Sub RWConfigFile()'读字符串Dim lng As LongDim retstr As Stringretstr = String(260, 0)lng = GetPrivateProfileString("config", "para1", "", retstr, 256, "c:\config.ini")retstr = Replace(retstr, Chr(0), "")'读整数lng = GetPrivateProfileInt("config", "para2", 0, "c:\config.ini") '写字符串lng = WritePrivateProfileString("config", "para3", "写文件测试", "c:\config.ini")End Subconfig.ini配置文件格式:[config]para1=你好abc111para2=123para3=写文件测试特别提示:声明在模块内,配置文件中值两边的空格会被忽略掉。
VC中操作INI文件的函数
Name=tian"0Age=20"0Sex=man"0"0(每条以"0分割,最后以两个"0结束)
而我们是想等到每个key及其对应的值,那怎么分割上面那个字符串呢?在VB有中个叫Split()函数,用起来很方便,但是vc里面没有。
当然,你也可以在VC中去实现一个Split()函数,不过我在这里提供一个简单的方法:
);
这个 api 可以读出整个 section 的内容,当你不知道 section 中有哪些 key 的时候,可以使用这个 api 将整个 section 读出后再处理。
说明:
例ini文件为:
[student]
Name=tian
Age=20
Sex=man
由GetPrivateProfileSection()函数第二个参数lpReturnedString 返回的字符串如下:
WriteProfileString(
LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址
LPCTSTR lpString // 要写的字符串地址
);
如果 Win.ini 没有指定的 Section,API 会新建 Section,如果没有指定的 Key 则新建一个 Key 并写入数据,如果已经存在,则用字符串代替原来的值。
INT nDefault // 如果 Key 值没有找到,则返回缺省的值是多少
);
如果 Key 值没有找到的话,返回值是 nDefault 指定的缺省值,如果 Key 中的值是负数,则返回 0,如果 Key 指定的是数字和字符串的混合,则返回数字部分的值,比如说 x=1234abcd,则返回 1234
c#操作ini文件
无论在web还是在窗体程序的时候,可能都需要配置文件来保存一些数据,比如登陆QQ 的时候保存帐号密码,网站的保存(网站使用的是cookie与本文无关),那么他们是怎么保存的呢?其实就是创建文件,文字流写入进文件。
就是这么简单。
有人会问,那数据不是不安全了么?我想里面保存的数据安不安全完全看你用什么方式来加密跟创建文件毫无关系。
那么接下来,就用简单的方式来操作配置文件的写法。
代码如下那么如果文件存在了怎么办?根据我现在的业务需求就是如果有配置文件那就读取配置文件的信息操作ini文件的时候我们需要调用win apiDllImport是最常见的就是使用它来调用WIN32的API,例如上面所示。
extern 修饰符用于声明在外部实现的方法。
extern 修饰符的常见用法是在使用Interop 服务调入非托管代码时与DllImport 属性一起使用。
INI文件格式是某些平台或软件上的配置文件的非正式标准,以节(section)和键(key)构成,常用于微软Windows操作系统中。
这种配置文件的文件扩展名多为INI,故名。
INI是英文“初始化”(initialization)的缩写。
正如该术语所表示的,INI文件被用来对操作系统或特定程序初始化或进行参数设置。
因为默认创建的是空的配置文件,我们先手动的添加一些东西,[config]的意识是节点名称,类似xml的的节点读取的方式这里的路径我们要写绝对路径,系统要求的,相对路径会查不到。
好了运行后我们会得到UserID这个key的value的值可以试一试哟那么有读取了,上图是读取一个节点,那么如果很多节点写起来就麻烦了很多,我们把这个读的方法抽取出来读取的方式我们搞定了,那么我们来画个窗体做写入事件。
写入的系统函数写入的系统函数写入的系统函数写入方法写入也搞定了,那在窗体界面上我们看到了有一个单选框是否保存密码,大家应该知道怎么做了吧?就到这里~~有问题可以回复,有时间就解答。
c#通用配置文件读写类与格式转换(xml,ini,json)
c#通⽤配置⽂件读写类与格式转换(xml,ini,json).NET下编写程序的时候经常会使⽤到配置⽂件。
配置⽂件格式通常有xml、ini、json等⼏种,操作不同类型配置⽂件需要使⽤不同的⽅法,操作较为⿇烦。
特别是针对同时应⽤不同格式配置⽂件的时候,很容易引起混淆。
如果使⽤⼀个统⼀的⽅法对其进⾏操作,岂不美哉。
技术⽅案思路很简单,就是使⽤⼀个基类将配置⽂件的内容抽象出来,不同配置⽂件有不同的实现,对外统⼀调⽤⽅法。
最开始,打算⾃⼰写⼀个,后来对⽐ini与xml的时候(最开始没有把json考虑进来,⾃⼰⽤它来做配置⽂件的项⽬较少),发现xml完全可以替代ini⽂件的描述,直接⽤xml不是更好?于是⽅案就变成了⽤xml作为最基础的数据对象,其他配置⽂件转换成xml进⾏操作。
XDocument VS XmlDocment不解释,直接看图。
ini <-> xmlini⽂件构造⽐较简单,常见的ini有以下⼏条规范:注释以;开头,⼀直到⾏尾;类别项⽤[]包围,占据⼀整⾏;类别项下可以有多个配置项,直到下⼀个类别项或EOF结束;配置项格式:key=valueini格式是⼆级配置结构:类别>key。
通过类别和key就可以唯⼀获得⼀个值。
public static XDocument ToXml(this string[] iniStr){//ini没有根节点是不能直接转成xml的。
XDocument xdoc = new XDocument(new XElement("G" + Guid.NewGuid().ToString("N")));XElement node = xdoc.Root;foreach (var line in iniStr){var cline = line.Trim();if (string.IsNullOrWhiteSpace(cline)) continue;switch (line[0]){case ';':node.Add(new XComment(cline.Substring(1)));break;case '[':node = new XElement(cline.Substring(1, line.Length - 2));xdoc.Root.Add(node);break;case '\r':break;default:int index = cline.IndexOf('=');if (index < 1){throw new InvalidOperationException("Property does not contains '=' operator");}node.Add(new XElement(cline.Substring(0, index).Trim(), cline.Substring(index + 1)));break;}}return xdoc;}ini适合⽐较简单的配置读取,⽂件可读性强,读写也简单;⽽xml具有多级结构,复杂,还有dtd,xslt什么的,相对来说⽐较全⾯。
vc中读取配置文件的方法[资料]
在Visual C++ 6.0下对Windows配置设置文件的存取访问方法的详细介绍。
一、引言0不论是对于程序开发人员还是软件应用人员,一定不会对扩展名为"ini"的文件感到陌生,不仅Windows操作系统将大名鼎鼎的win.ini作为记录当前系统状态,并根据其记录内容对系统进行配置的一种便捷的方法,而且众多的应用软件也广泛地使用该类型的配置文件来对软件进行记录、配置。
本文就针对配置设置文件的使用展开讨论,以期能为软件状态的记录与设置寻求一种方便简洁的实现方法。
0二、配置设置文件概述0配置设置文件是Windows操作系统下的一种特殊化的ASCII文件,以"ini"为文件扩展名。
该文件也被称做是初始化文件(initialization file)和概要文件(profile),通常应用程序可以拥有自己的配置设置文件来存储自己的状态信息,一般来说私有的配置设置文件比较小,可以减少程序在初始化时读取配置文件时的信息量,从而可以提高程序的启动速度、提高应用程序和系统的性能。
但如待存取的信息涉及到Windows 系统环境或是其他的应用程序时才必须在Windows系统的配置文件win.ini中记录并在访问的同时发送出消息WM_WININICHANGE给所有的顶层窗口,通知其他的程序系统的配置文件已做了更改。
但由于win.ini中不仅记录了系统的有关信息,也存储着许多其他应用软件的一些配置数据,所以访问的数据量要远比私有的配置文件大的多。
0配置文件里的信息之所以能为系统和众多的软件所读取并识别,是由于其内部对数据的存取采用了预先约定好的"项-值对(entry-value pairs)"存储结构来对待存取的数据进行分门别类地进行条理清晰的存储。
我们可以打开系统目录下的win.ini文件:0[windows]load=run=NullPort=None0[Desktop]WallpaperStyle=2Pattern=(无)0[intl]s2359=PMiCountry=86 0可见,配置文件把信息分成若干"节",节标题放在方括号中,如[Desktop]就是Desktop节,在一个节内包含了一些与之相关相近的"项",并通过等号对其进行赋值。
VC操作INI
用VC操作ini配置文件2009年02月13日星期五 10:27Windows操作系统专门为此提供了6个API函数来对配置设置文件进行读、写:GetPrivateProfileInt() 从私有初始化文件获取整型数值GetPrivateProfileString() 从私有初始化文件获取字符串型值GetProfileInt 从win.ini 获取整数值GetProfileString 从win.ini 获取字符串值WritePrivateProfileString 写字符串到私有初始化文件WriteProfileString 写字符串到win.ini我们可以把视图类的:OnInitialUpdate() 函数作为程序启动时读取配置文件的入口,配置文件的存储格式如下:[SECTION 1]XPos=300YPos=200[SECTION 2]Text=Hello仅有两个节,XPos和YPos标明了待显示信息的坐标,而待显示的信息存储在第二节的Text项中,用读取访问私有配置设置文件的API函数将其分别读入到变量m_nXPos,m_nYPos和m_strText中,并通过Invalidate()调用OnDraw()函数,在其内用TextOut函数将该信息在读取的坐标位置显示出来:m_nXPos=GetPrivateProfileInt("SECTION 1", //节名"XPos", //项名0, //没找到此项时的缺省返回值"C:\test\debug\test.ini"); //配置文件的准确路径m_nYPos=GetPrivateProfileInt("SECTION 1","YPos",0,exeFullPath);char buf[256];len=GetPrivateProfileString("SECTION 2", //节名"Text", //项名"No Text", //没找到此项时的返回值buf, //目标缓冲区地址256, //目标缓冲区长度"C:\test\debug\test.ini"); //配置文件的准确路径for(int i=0;i<len;i++){CString str;str.Format("%c",buf[i]);m_strText+=str;}Invalidate();一般配置文件是和应用程序存放在同一个目录中的如果用"C:\test\debug\test.ini"的绝对路径进行设置就会出现路径改变后找不到配置文件的问题,所以应动态搜寻配置文件的存放地址:Tchar exeFullPath[MAX_PATH]; // MAX_PATH在API中有定义,为128int len=GetModuleFileName(NULL,exeFullPath, //应用程序的全路径存放地址MAX_PATH);CString path="\test.ini"; //配置文件名::strcpy(exeFullPath+len-13,path); //组合出配置文件的全路径写配置文件也基本类似,只是需要把数值类型的变量格式化成字符串再行存储:str.Format("%d",m_nXPos);WritePrivateProfileString("SECTION 1","XPos",str,exeFullPath);str.Format("%d",m_nYPos);WritePrivateProfileString("SECTION 1","YPos",str,exeFullPath); WritePrivateProfileString("SECTION 2","Text",m_strText,exeFullPath);我们一定遇到过这样的程序:在执行过一遍以后,重启系统会自动加载该程序,其实除了在启动菜单和注册表添加信息外,也可以用 WriteProfileString()函数向win.ini的"windows"节的"run"项目添加应用程序的全路径来实现,这要比其它两种方法简便的多,而且也比较安全。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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}; //存放一个段名。