INI文件读写

合集下载

INI文件读写详解

INI文件读写详解
DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // 同1(1)
LPCTSTR lpKeyName, // 同1(1)
LPCTSTR lpDefault, // 同1(1)
LPTSTR lpReturnedString, // 同1(1)
INI文件的读写详解
INI文件读写 文章指数:0 CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。
int i; //i指向数组chSectionNames的某个位置,从0开始,顺序后移
int j=0; //j用来保存下一个节名字符串的首地址相对于当前i的位置偏移量
int count=0; //统计节的个数
//CString name;
//char id[20];
//在Ex1目录下的ex1.ini中创建一个Test节,并在该节中创建一个键id,其值为xym
//若Ex1.ini文件与读写该文件的程序在同一个目录下,则上面语句也可写为:
::WritePrivateProfileString("Test","id","xym",".\\ex1.ini");
::GetPrivateProfileSectionNames(chSectionNames,2048,".\\ex1.ini");
for(i=0;i<2048;i++,j++)

C#ini文件读写实例

C#ini文件读写实例

C#ini⽂件读写实例ini⽂件⼀般⽤于保存当前运⾏的程序或者⼀些临时的配置属性的⽂件。

也有时⽤于保存⼀定的数据以便于临时或者配置上的需要。

⽂本格式如下:[Section1 Name] ---------⽤ []括起来,其包含多个keyKeyName1=value1 ------格式是 Key=value。

KeyName2=value2...[Section2 Name]KeyName1=value1KeyName2=value2其中有专门读写ini⽂件的windows⽅法:[DllImport("kernel32")]// 写⼊ini⽂件操作section,key,valueprivate static extern long WritePrivateProfileString(string section,string key, string val, string filePath);[DllImport("kernel32")]// 读取ini⽂件操作section,key,和返回的keyvalueprivate static extern int GetPrivateProfileString(string section,string key, string def, StringBuilder retVal,int size, string filePath);C#操作时代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;using System.Runtime.InteropServices;//using System.Collections;//using System.Collections.Specialized;namespace iniTest1{public partial class Form1 : Form{[DllImport("kernel32")]// 写⼊ini⽂件操作section,key,valueprivate static extern long WritePrivateProfileString(string section, string key, string val, string filePath);[DllImport("kernel32")]// 读取ini⽂件操作section,key,和返回的keyvalueprivate static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){try{openFileDialog1.ShowDialog();textBox1.Text = openFileDialog1.FileName;}catch (Exception ex){MessageBox.Show(ex.Message);}}private void button2_Click(object sender, EventArgs e){string FileName = textBox1.Text;string section = textBox2.Text;string key = textBox3.Text;string keyValue = textBox4.Text;try{//写⼊ini⽂件属性WritePrivateProfileString(section, key, keyValue, FileName);MessageBox.Show("成功写⼊INI⽂件!", "信息");}catch (Exception ex){MessageBox.Show(ex.Message);}}private void button3_Click(object sender, EventArgs e){StringBuilder temp = new StringBuilder(255);string FileName = textBox1.Text;string section = textBox2.Text;string key = textBox3.Text;//读取ini⽂件属性值---赋予当前属性上tempint i = GetPrivateProfileString(section, key, "⽆法读取对应数值!", temp, 255, FileName);//显⽰读取的数值textBox4.Text = temp.ToString();}}}。

C#读写ini文件详解

C#读写ini文件详解
private static extern int GetPrivateProfileString (
string section ,
string key , string def , StringBuilder retVal ,
int size , string filePath ) ;
}
}
C#读写ini文件的相关内容就向你介绍到这里,希望对你了解和学习C#读写ini文件有所帮助。�
我现在介绍的是系统处理INI的方法.
虽然C#中没有,但是在"kernel32.dll"这个文件中有Win32的API函数--WritePrivateProfileString()和GetPrivateProfileString()
C#读写ini文件实现之C#声明INI文件的写操作函数WritePrivateProfileString():
/// 读出INI文件
/// ﹤/summary﹥
/// ﹤param name="Section"﹥项目名称(如 [TypeName] )﹤/param﹥
/// ﹤param name="Key"﹥键﹤/param﹥
public string IniReadValue(string Section,string Key)
/// ﹤summary﹥
/// 构造方法
/// ﹤/summary﹥
/// ﹤param name="INIPath"﹥文件路径﹤/param﹥
public INIClass(string INIPath)
{
inipath = INIPath;

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 内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

ini配置文件操作方法

ini配置文件操作方法

ini配置文件操作方法一、ini文件介绍ini配置文件常用于存储项目全局变量如:接口地址、输出文件路径、项目地址、用户名、密码等二、ini文件编写格式[节点]选项=选项值;表示注释注意:节点名不可以重复【所以写入新节点前要判断是否存在】三、.ini 文件读取1、.ini文件读import configparserconfig = configparser.ConfigParser()config.read('config.ini')# 获取所有节点sec = config.sections()print(sec)# 获取单个节点下所有选项db = config.options(section="database")print(db)# 获取单个节点下某个选项值username = config.get(section="database", option="username")print(username)# 获取某个节点下所有选项及选项值value = config.items(section="database")print(f"获取到的值是:{value}")2、ini文件写# 增加一个节点config.add_section("db")# 给节点增加选项和值config.set(section="db", option="usr", value="chuanzhang") # 保存操作with open(os.path.dirname(__file__)+'/config.ini', mode='w+') as file:config.write(file)file.close()3、删除# 删除节点下某个选项config.remove_option(section="db", option="pwd")with open(os.path.dirname(__file__)+'/config.ini', mode='w+') as opt:config.write(opt)opt.close()# 删除节点config.remove_section("db")# 删除后保存with open(os.path.dirname(__file__)+'/config.ini', mode='w+') as data:config.write(data)data.close()。

QT中如何读写ini配置文件

QT中如何读写ini配置文件

QT中如何读写ini配置⽂件如图1所⽰,我们需要在QT界⾯中实现⼿动读取参数存放的位置,那么我们该如何做呢?⽅法:读取ini格式的配置⽂件,实现路径的写⼊与读取。

第⼀步:界⾯构造函数中,初始化⼀个Config.ini⽂件//初始化⼀个.ini配置⽂件//qApp是QT系统⾃带的,可以直接使⽤QString iniFilePath=qApp-&gt;applicationDirPath()+"/Config.ini";//如果不存在Config.ini,便⽣成⼀个Config.ini。

如果已经存在了,则略过。

if(!QFile::exists(iniFilePath)){QSettings configIniWrite(iniFilePath,QSettings::IniFormat);configIniWrite.beginGroup("calib_data_path");configIniWrite.setValue("calib_data_path","FA0180090134.xml");configIniWrite.endGroup();configIniWrite.beginGroup("robot_pose_file");configIniWrite.setValue("robot_pose_file_path","robot_pose_file.txt");configIniWrite.endGroup();}第⼆步:定义⼀个保存Config⽂件的函数void saveConfig(const QString& group,const QString& name, const QVariant& var){QString iniFilePath = qApp-&gt;applicationDirPath() + "/Config.ini";if (QFile::exists(iniFilePath)){QSettings configIniWrite(iniFilePath,QSettings::IniFormat);configIniWrite.beginGroup(group);configIniWrite.setValue(name,var);configIniWrite.endGroup();}}第三步:设置路径Demo1://设置相机标定⽂件路径void CalibrationForm::btnLoadCamParaPath_clicked(){QFileDialog dialog(this,tr("Select calib data file"));dialog.setAcceptMode(QFileDialog::AcceptOpen);dialog.setFileMode(QFileDialog::ExistingFile);static bool firstDialog = true;if (firstDialog){firstDialog = false;const QStringList fileLocations =QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);dialog.setDirectory(fileLocations.isEmpty() ?QDir::currentPath():st());}dialog.setNameFilter(tr("FA0180090134(*.xml)"));if (dialog.exec()==QDialog::Accepted){//获得⽂件夹路径+⽂件名_campara_path = dialog.selectedFiles().first();ui-&gt;lineEditCamParaPath-&gt;setText(_campara_path); //此处是在lineEdit窗⼝显⽰路径名+⽂件名saveConfig("calib_data_path","calib_data_path",_campara_path);}}demo2://设置⼿眼标定时的机械臂运动轨迹路径void CalibrationForm::btnLoadRobotPara_clicked(){QFileDialog dialog(this,tr("Select robot pose file"));dialog.setAcceptMode(QFileDialog::AcceptOpen);dialog.setFileMode(QFileDialog::ExistingFile);static bool first_Dialog = true;if (first_Dialog){first_Dialog = false;const QStringList fileLocations =QStandardPaths::standardLocations(QStandardPaths::DesktopLocation);dialog.setDirectory(fileLocations.isEmpty()?QDir::currentPath():st());}dialog.setNameFilter(tr("robot_pose_file(*.txt)"));if (dialog.exec()==QDialog::Accepted){_robot_pose_path = dialog.selectedFiles().first();ui-&gt;lineEditRobotPath-&gt;setText(_robot_pose_path);saveConfig("robot_pose_file","robot_pose_file_path",_robot_pose_path);}}由于ini⽂件不可在星球中上传,此处⽤txt形式的截图作为附件,见图2.到此这篇关于QT中如何读写ini配置⽂件的⽂章就介绍到这了,更多相关QT读写ini内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

CC++关于如何读写ini配置文件(小结)

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 的其他⼦函数就会失灵。

python简单读写ini文件

python简单读写ini文件

python简单读写ini⽂件1、创建ini⽂件2、认识configparse类中基础⽅法cfg_obj = configparser.ConfigParser() #创建对象cfg_obj.read(conf_file_path) #读取配置⽂件sections = cfg_obj.sections()#获取配置⽂件中所有的section节点options = cfg_obj.options("default")#获取对应节点下的所有keyfor sec in sections:print(cfg_obj.options(sec))#可使⽤for循环获取ini⽂件中各个节点下的key值value = cfg_obj.get("default","path") #获取对应的valuecfg_obj.set("default","path111","value1111") #设置key和value到ini⽂件cfg_obj.add_section("default") #增加section到⽂件cfg_obj.remove_section("default") #移除section节点数据cfg_obj.remove_option("default","patha") #移除节点下的optionconfig_file_obj = open( conf_file_path,"w") #创建ini⽂件对象cfg_obj.write(config_file_obj) #写⼊⽂件judge_value_is_exist = cfg_obj.has_section("default") #判断section节点是否存在judge_value_is_exist2 = cfg_obj.has_option("default","path")#判断节点下的key是否存在3、封装,创建⼀个读取ini⽂件的⼯具类1)创建初始化函数class ConfigUtils:def __init__(self,config_file_path):self.cfg_path = config_file_pathself.cfg =configparser.ConfigParser()self.cfg.read(self.cfg_path)2)创建读取配置⽂件值的⽅法def read_value(self,section,key):value = self.cfg.get(section,key)return value3)创建写⼊配置⽂件的⽅法def write_value(self,section,key,value):self.cfg.set( section,key,value )config_file_obj = open( self.cfg_path , "w")self.cfg.write(config_file_obj)config_file_obj.flush()config_file_obj.close()cfg_obj.set("default","path111","value1111")。

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

INI文件读写.txt男人的话就像老太太的牙齿,有多少是真的?!问:你喜欢我哪一点?答:我喜欢你离我远一点!执子之手,方知子丑,泪流满面,子不走我走。

诸葛亮出山前,也没带过兵!凭啥我就要工作经验?INI文件读写文章指数:0 CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。

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系列的语言中,转义字符'\\'表示反斜线'\'。

另外,当使用相对路径时,\\前的.号不能丢掉了。

二、从ini文件中读取数据的函数1、从系统的win.ini文件中读取信息(1) 读取字符串DWORD GetProfileString(LPCTSTR lpAppName, // 节名LPCTSTR lpKeyName, // 键名,读取该键的值LPCTSTR lpDefault, // 若指定的键不存在,该值作为读取的默认值LPTSTR lpReturnedString, // 一个指向缓冲区的指针,接收读取的字符串DWORD nSize // 指定lpReturnedString指向的缓冲区的大小)如:CString str;::GetProfileString("Test","id","Error",str.GetBuffer(20),20);(2) 读取整数UINT GetProfileInt(LPCTSTR lpAppName, // 同上LPCTSTR lpKeyName, // 同上INT nDefault // 若指定的键名不存在,该值作为读取的默认值)如使用以下语句写入了年龄信息:::WriteProfileString("Test","age","25");//在win.ini中创建一个Test节,并在该节中创建一个键age,其值为25则可用以下语句读取age键的值:int age;age=::GetProfileInt("Test","age",0);2、从自己的ini文件中读取信息(1) 读取字符串DWORD GetPrivateProfileString(LPCTSTR lpAppName, // 同1(1)LPCTSTR lpKeyName, // 同1(1)LPCTSTR lpDefault, // 同1(1)LPTSTR lpReturnedString, // 同1(1)DWORD nSize, // 同1(1)LPCTSTR lpFileName // 读取信息的文件名。

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

)如:CString str;::GetPrivateProfileString("Test","id","Error",str.GetBuffer(20),20,".\\ex1.ini");或:::GetPrivateProfileString("Test","id","Error",str.GetBuffer(20),20,"d:\\vc\\Ex1\\ex1.ini");(2) 读取整数UINT GetPrivateProfileInt(LPCTSTR lpAppName, // 同上LPCTSTR lpKeyName, // 同上INT nDefault, // 若指定的键名不存在,该值作为读取的默认值LPCTSTR lpFileName // 同上)如使用以下语句写入了年龄信息:::WritePrivateProfileString("Test","age","25",".\\ex1.ini");//在ex1.ini中创建一个Test节,并在该节中创建一个键age,其值为25则可用以下语句读取age键的值:int age;age=::GetPrivateProfileInt("Test","age",0,".\\ex1.ini");三、删除键值或节回顾一下WriteProfileString函数的说明BOOL WriteProfileString(LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。

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

若为NULL,则删除对应的键)由此可见,要删除某个节,只需要将WriteProfileString第二个参数设为NULL即可。

而要删除某个键,则只需要将该函数的第三个参数设为 NULL即可。

这是删除系统的win.ini 中的节或键,类似的,要删除自己定义的ini文件中的节或键,也可做相同的操作。

如:::WriteProfileString("Test",NULL,NULL); //删除win.ini中的Test节::WriteProfileString("Test","id",NULL); //删除win.ini中的id键::WritePrivateProfileString("Test",NULL,NULL,".\\ex1.ini"); //删除ex1.ini 中的Test节::WritePrivateProfileString("Test","id",NULL,".\\ex1.ini"); //删除ex1.ini中的id键四、如何判断一个ini文件中有多少个节要判断一个ini文件中有多少个节,最简单的办法就是将所有的节名都找出来,然后统计节名的个数。

而要将所有的节名找出来,使用GetPrivateProfileSectionNames函数就可以了,其原型如下:DWORD GetPrivateProfileSectionNames(LPTSTR lpszReturnBuffer, // 指向一个缓冲区,用来保存返回的所有节名DWORD nSize, // 参数lpszReturnBuffer的大小LPCTSTR lpFileName // 文件名,若该ini文件与程序在同一个目录下,//也可使用相对路径,否则需要给出绝度路径)下面的是用来统计一个ini文件中共有多少个节的函数,当然,如果需要同时找到每个节中的各个键及其值,根据找到节名就可以很容易的得到了。

/*统计共有多少个节节名的分离方法:若chSectionNames数组的第一字符是'\0'字符,则表明有0个节。

否则,从chSectionNames数组的第一个字符开始,顺序往后找,直到找到一个'\0'字符,若该字符的后继字符不是 '\0'字符,则表明前面的字符组成一个节名。

若连续找到两个'\0'字符,则统计结束*/int CTestDlg::CalcCount(void){TCHAR chSectionNames[2048]={0}; //所有节名组成的字符数组char * pSectionName; //保存找到的某个节名字符串的首地址int i; //i指向数组chSectionNames的某个位置,从0开始,顺序后移int j=0; //j用来保存下一个节名字符串的首地址相对于当前i的位置偏移量int count=0; //统计节的个数//CString name;//char id[20];::GetPrivateProfileSectionNames(chSectionNames,2048,".\\ex1.ini");for(i=0;i<2048;i++,j++){if(chSectionNames[0]=='\0')break; //如果第一个字符就是0,则说明ini中一个节也没有if(chSectionNames[i]=='\0'){pSectionName=&chSectionNames[i-j]; //找到一个0,则说明从这个字符往前,减。

相关文档
最新文档