配置文件(ini)的读写

合集下载

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

C语言读取INI配置文件

C语言读取INI配置文件

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<n;i++)TRACE("%s\n",arrSection[i]);*//*枚举全部键名及值CStringArray arrKey,arrValue;n=ini.GetKeyValues(arrKey,arrValue,"段1");for(int i=0;i<n;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*&!* 这是个垃圾字符没有特别意义,这样乱写是防止凑巧相同。

ini文件只知道节名,读取节下所有值的方法qt

ini文件只知道节名,读取节下所有值的方法qt

ini文件只知道节名,读取节下所有值的方法qt1.引言1.1 概述概述INI文件是一种常见的配置文件格式,它被广泛用于存储和管理应用程序的配置信息。

INI文件由一系列的节(section)和键值对(key-value)组成。

每个节包含一组相关的键值对,用来描述特定的配置项。

在读取INI 文件时,通常可以根据节名和键名来获取对应的值。

然而,在某些情况下,我们可能只知道节的名称,而不清楚该节下有哪些键值对。

本文将介绍如何通过Qt框架提供的方法来读取INI文件中某个节下的所有键值对。

首先,我们需要了解Qt框架中关于INI文件的相关类和函数。

Qt提供了一个名为QSettings的类,它是用于读写配置信息的工具类。

QSettings类支持INI文件格式,并提供了方便的方法来读取和写入INI 文件中的配置项。

在使用QSettings类读取INI文件时,我们可以先使用QSettings的构造函数来指定INI文件的路径,然后使用value()函数来获取指定节下的键值对。

为了读取某个节下的所有键值对,我们可以使用childGroups()函数来获取所有的子节名,然后再遍历每个子节获取其对应的键值对。

下面是一个简单的示例代码,展示了如何使用Qt框架中的QSettings 类来读取INI文件中某个节下的所有键值对:cppinclude <QSettings>include <QDebug>void readIniFile(const QString& filePath){QSettings settings(filePath, QSettings::IniFormat);QStringList sectionList = settings.childGroups();foreach (const QString& section, sectionList) {settings.beginGroup(section);QStringList keys = settings.childKeys();foreach (const QString& key, keys) {QString value = settings.value(key).toString();qDebug() << "Section:" << section << "Key:" << key << "Value:" << value;}settings.endGroup();}}int main(){QString filePath = "config.ini";readIniFile(filePath);return 0;}以上代码中,readIniFile()函数用于读取INI文件中某个节下的所有键值对。

bat读写ini文件的函数

bat读写ini文件的函数

bat读写ini文件的函数BAT脚本可以通过读写INI文件来记录和获取配置信息。

INI文件是一种常见的配置文件格式,在Windows系统中被广泛应用。

读取INI文件的函数:```setlocal EnableDelayedExpansionset 'INI_FILE=config.ini'set 'SECTION=[Section1]'set 'KEY=Key1'for /F 'usebackq delims=' %%a in ('%INI_FILE%') do ( set 'LINE=%%a'REM 去掉行首尾的空格和制表符set 'LINE=!LINE: =!'set 'LINE=!LINE: =!'set 'LINE=!LINE: =!'REM 如果是[section]行,则判断是否是要读取的sectionif '!LINE:~0,1!'=='[' (set 'CUR_SECTION=!LINE!'set 'CUR_SECTION=!CUR_SECTION:[=!'set 'CUR_SECTION=!CUR_SECTION:]=!'if '!CUR_SECTION!'=='!SECTION!' (set 'IN_SECTION=true') else (set 'IN_SECTION=false')) else (REM 不是[section]行,如果在要读取的section内,则判断是否是要读取的keyif '!IN_SECTION!'=='true' (for /F 'tokens=1,* delims==' %%b in ('!LINE!') do (set 'CUR_KEY=%%b'set 'CUR_VALUE=%%c'REM 去掉key和value的空格set 'CUR_KEY=!CUR_KEY: =!'set 'CUR_VALUE=!CUR_VALUE: =!'if '!CUR_KEY!'=='!KEY!' (echo !CUR_VALUE!)))))```该函数将INI文件中`[Section1]`内`Key1`的值打印出来。

ini文件格式读取

ini文件格式读取

GetProfileString - 从 Win.ini 文件的某个 Section 取得一个 key 的字符串,它的原形是:
GetProfileString(
LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
LPCTSTR lpKeyName, // 指向包含 Key 名称的字符串地址
DWORD nSize // 返回数据的缓冲区长度
);
WriteProfileSection - 将一个整个 Section 的值 写入 Win.ini 文件的指定 Section 中,它的原形是:
WriteProfileSection(
LPCTSTR lpAppName, // 指向包含 Section 名称的字符串地址
ini 文件是文本文件,中间的数据格式一般为:
[Section1 Name]
KeyName1=value1
KeyName2=value2
...
[Section2 Name]
KeyName1=value1
KeyName2=value2
ini 文件可以分为几个 Section,每个 Section 的名称用 [] 括起来,在一个 Section 中,可以有很多的 Key,每一个 Key 可以有一个值并占用一行,格式是 Key=value,Win32 对 ini 文件操作的 api 中,有一部分是对 win.ini 操作的,有一部分是对用户自定义的 ini 文件操作的。Win.in 和 system.ini 是Windows的两个非常重要的初始化文件,Windows将用户所作的选择以及各种变化的系统信息记录在这两个文件中。System.ini 描述了系统硬件的当前状态,Win.ini 文件则包含了Windows 系统运行环境的当前配置。由于 Win.ini 文件的重要性和常用性,Win32 中有专门对 Win.ini 进行操作的 api,它们是:

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资源文件引用头文件引用头文件用户文件、应用程序文件对话框加载关闭对话框配置文件里的记录。

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

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

Python3读写ini配置文件的示例

Python3读写ini配置文件的示例

Python3读写ini配置⽂件的⽰例ini⽂件即Initialization File初始化⽂件,在应⽤程序及框架中常作为配置⽂件使⽤,是⼀种静态纯⽂本⽂件,使⽤记事本即可编辑。

配置⽂件的主要功能就是存储⼀批变量和变量值,在ini⽂件中使⽤[章(Section)]对变量进⾏了分组,基本格式如下。

# filename: config.ini[user]name=adminpassword=123456is_admin=true[mysql]host=10.10.10.10port=3306db=apitestuser=rootpassword=123456[log]file=run.loglevel=info以上⽂件中,有3个Section段,分别user、mysql和log。

使⽤配置⽂件的好处在于,不⽤修改代码⽂件就可以更改使⽤的⽤户、数据库以及⽇志的配置,避免修改代码带来新的bug,或需要重新打包(如Java项⽬中)。

ini⽂件中使⽤#或者;添加注释,最好独占⼀⾏,不能写在变量后⾯读取读取ini配置⽂件需要使⽤Python3⾃带的configparser库,使⽤⽰例如下from configparser import ConfigParser # Python2中是from ConfigParser import ConfigParserconf = ConfigParser() # 需要实例化⼀个ConfigParser对象conf.read('config.ini') # 需要添加上config.ini的路径,不需要open打开,直接给⽂件路径就读取,也可以指定encoding='utf-8'print(conf['user']['name']) # 读取user段的name变量的值,字符串格式conf对象每个section段的数据类似于⼀个字典,可以使⽤['变量名']或者.get('变量名')获取对应的值,获取到的是字符串格式。

QT配置ini文件的建立,读取,写入操作

QT配置ini文件的建立,读取,写入操作

ini文件格式INI文件由节、键、值组成。

节[section]参数(键=值)name=value下面是一个ini文件的例子[Section1Name]KeyName1=value1KeyName2=value2...[Section2Name]KeyName21=value21KeyName22=value22其中:[Section1Name]用来表示一个段落。

因为INI文件可能是项目中共用的,所以使用[Section Name]段名来区分不同用途的参数区。

例如:[Section1Name]表示传感器灵敏度参数区;[Section2Name]表示测量通道参数区等等。

注解:使用分号表示(;)。

在分号后面的文字,直到该行结尾都全部为注解。

二Qt写ini文件[cpp]view plaincopyprint?1#include<QtCore/QCoreApplication>2#include<QSettings>3int main(int argc,char*argv[])4{5QCoreApplication a(argc,argv);6//Qt中使用QSettings类读写ini文件7//QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省8QSettings*configIniWrite=new QSettings("hahaya.ini",QSettings::IniFormat);9//向ini文件中写入内容,setValue函数的两个参数是键值对10//向ini文件的第一个节写入内容,ip节下的第一个参数11configIniWrite->setValue("/ip/first","192.168.0.1");12//向ini文件的第一个节写入内容,ip节下的第二个参数13configIniWrite->setValue("ip/second","127.0.0.1");14//向ini文件的第二个节写入内容,port节下的第一个参数15configIniWrite->setValue("port/open","2222");16//写入完成后删除指针17delete configIniWrite;1819return a.exec();20}[cpp]view plain copyprint?21#include<QtCore/QCoreApplication>22#include<QSettings>23int main(int argc,char*argv[])24{25QCoreApplication a(argc,argv);26//Qt中使用QSettings类读写ini文件27//QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省28QSettings*configIniWrite=new QSettings("hahaya.ini",QSettings::IniFormat);29//向ini文件中写入内容,setValue函数的两个参数是键值对30//向ini文件的第一个节写入内容,ip节下的第一个参数31configIniWrite->setValue("/ip/first","192.168.0.1");32//向ini文件的第一个节写入内容,ip节下的第二个参数33configIniWrite->setValue("ip/second","127.0.0.1");34//向ini文件的第二个节写入内容,port节下的第一个参数35configIniWrite->setValue("port/open","2222");36//写入完成后删除指针37delete configIniWrite;3839return a.exec();40}运行程序后,打开程序目录下的hahaya.ini文件,结果如下图所示:三Qt读ini文件[cpp]view plaincopyprint?41#include<QtCore/QCoreApplication>42#include<QSettings>43#include<QString>44#include<QDebug>45int main(int argc,char*argv[])46{47QCoreApplication a(argc,argv);4849QSettings*configIniRead=new QSettings("hahaya.ini",QSettings::IniFormat);50//将读取到的ini文件保存在QString中,先取值,然后通过toString()函数转换成QString类型51QString ipResult=configIniRead->value("/ip/second").toString();52QString portResult=configIniRead->value("/port/open").toString();53//打印得到的结果54qDebug()<<ipResult;55qDebug()<<portResult;56//读入入完成后删除指针57delete configIniRead;58return a.exec();59}[cpp]view plain copyprint?60#include<QtCore/QCoreApplication>61#include<QSettings>62#include<QString>63#include<QDebug>64int main(int argc,char*argv[])65{66QCoreApplication a(argc,argv);6768QSettings*configIniRead=new QSettings("hahaya.ini",QSettings::IniFormat);69//将读取到的ini文件保存在QString中,先取值,然后通过toString()函数转换成QString类型70QString ipResult=configIniRead->value("/ip/second").toString();71QString portResult=configIniRead->value("/port/open").toString();72//打印得到的结果73qDebug()<<ipResult;74qDebug()<<portResult;75//读入入完成后删除指针76delete configIniRead;77return a.exec();78}程序运行截图:。

Qt读写配置文件(.ini)

Qt读写配置文件(.ini)

Qt读写配置⽂件(.ini)(转载)INIINI⽂件格式是某些平台或软件上的配置⽂件的⾮正式标准,以节(section)和键(key)构成,常⽤于微软Windows操作系统中。

INI⽂件是Initialization File的缩写,即初始化⽂件。

除了windows现在很多其他操作系统下⾯的应⽤软件也有.ini⽂件,⽤来配置应⽤软件以实现不同⽤户的要求。

⼀般不⽤直接编辑这些.ini⽂件,应⽤程序的图形界⾯即可操作以实现相同的功能。

INI⽂件被⽤来对操作系统或特定程序初始化或进⾏参数设置。

⽂件格式节(section)节⽤⽅括号括起来,单独占⼀⾏,例如:[section]键(key)键(key)⼜名属性(property),单独占⼀⾏⽤等号连接键名和键值,例如:name=valueQT读写INI⽂件Qt4.0⼀个⾮常有⽤的类QSettings,在windows平台,它提供了ini⽂件读写,注册表读写的功能。

⽽且使⽤也⾮常简单。

QSettings::Format有两种:QSettings::NativeFormat在windows平台可以读写windows注册表;QSettings::IniFormat可以读写ini格式的配置⽂件。

今天给⼤家介绍下⼀种简单的配置⽂件ini的读写,⼀句话:简单1、#include <QSettings>2、ini⽂件书写格式:[DevOption]mainFun=25subFun=40service=13、读写ini⽂件1 //qt写⼊ini配置⽂件2 QSettings settings("Option.ini",QSettings::IniFormat);3 settings.beginGroup("DevOption");4 settings.setValue("mainFun",25);5 settings.setValue("subFun",40);6 settings.setValue("service",1);7 settings.endGroup();8 //读取ini9 QSettings settingsread("Option.ini",QSettings::IniFormat);10 int mainFun = settingsread.value("DevOption/mainFun").toInt();11 QString service = settingsread.value("DevOption/service").toString();4、这种.ini配置⽂件书写简单易懂,也易于操作,也是⽐较常见的配置⽂件。

Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON。。。

Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON。。。

Qt读写三种⽂件,QSettings读ini配置⽂件,QJsonDocument读JSON。

第⼀种INI配置⽂件.ini ⽂件是Initialization File的缩写,即初始化⽂件。

除了windows现在很多其他操作系统下⾯的应⽤软件也有.ini⽂件,⽤来配置应⽤软件以实现不同⽤户的要求。

⼀般不⽤直接编辑这些.ini⽂件,应⽤程序的图形界⾯即可操作以实现相同的功能。

它可以⽤来存放软件信息,注册表信息等。

读INI⽂件INI⽂件内容如下:[conn]ip=127.0.0.1port=8080databaseversion=QSQLITEdatabasename=studentusername=YYCpassword=rootqreadini.h⽂件内容如下:#ifndef QREADINI_H#define QREADINI_H#include<QSettings>#define DATACONFIG QReadIni::getInstance()->getIniConfig()typedef struct IniConfig{QString ip; //IP地址QString port; //端⼝QString dataBaseVersion; //数据库版本QString dataBaseName; //数据库名称QString userName; //⽤户名QString passWord; //密码}IniConfig;class QReadIni{public:static QReadIni*getInstance();void readIni();const IniConfig &getIniConfig();private:QReadIni();IniConfig iniConfig;static QReadIni*instance;};#endif// QREADINI_Hqreadini.cpp⽂件内容如下:#include "qreadini.h"QReadIni*QReadIni::instance = NULL;QReadIni *QReadIni::getInstance(){if(instance == NULL){instance = new QReadIni();}return instance;}QReadIni::QReadIni(){this->readIni();}void QReadIni::readIni(){QSettings * configIniRead = new QSettings("config.ini",QSettings::IniFormat);//初始化读取Ini⽂件对象 iniConfig.ip = configIniRead->value("conn/ip").toString(); //IP地址iniConfig.port = configIniRead->value("conn/port").toString(); //端⼝iniConfig.dataBaseVersion = configIniRead->value("conn/databaseversion").toString();//数据库版本iniConfig.dataBaseName = configIniRead->value("conn/databasename").toString(); //数据库名称 erName = configIniRead->value("conn/username").toString(); //⽤户名iniConfig.passWord = configIniRead->value("conn/password").toString(); //密码delete configIniRead;}const IniConfig &QReadIni::getIniConfig(){return iniConfig;}写ini⽂件#include <QtCore/QCoreApplication>#include <QSettings>int main(int argc, char *argv[]){QCoreApplication a(argc, argv);//Qt中使⽤QSettings类读写ini⽂件//QSettings构造函数的第⼀个参数是ini⽂件的路径,第⼆个参数表⽰针对ini⽂件,第三个参数可以缺省QSettings *configIniWrite = new QSettings("hahaya.ini", QSettings::IniFormat);//向ini⽂件中写⼊内容,setValue函数的两个参数是键值对//向ini⽂件的第⼀个节写⼊内容,ip节下的第⼀个参数configIniWrite->setValue("/ip/first", "192.168.0.1");//向ini⽂件的第⼀个节写⼊内容,ip节下的第⼆个参数configIniWrite->setValue("ip/second", "127.0.0.1");//向ini⽂件的第⼆个节写⼊内容,port节下的第⼀个参数configIniWrite->setValue("port/open", "2222");//写⼊完成后删除指针delete configIniWrite;return a.exec();}第⼆种JSON⽂件"conn": {"ip": "127.0.0.1","port": "8080","databaseversion": "QSQLITE","databasename": "student","username": "YYC","password": "root"}}qreadjson.h⽂件内容如下#ifndef QREADJSON_H#define QREADJSON_H#include <QString>#include <QFile>#include <QIODevice>#include <QDomNodeList>#include <QJsonDocument>#include <QJsonObject>#define JSONCONFIG QReadJson::getInstance()->getJsonConfig() typedef struct JsonConfig{QString ip; //IP地址QString port; //端⼝QString dataBaseVersion; //数据库版本QString dataBaseName; //数据库名称QString userName; //⽤户名QString passWord; //密码}JsonConfig;class QReadJson{public:static QReadJson * getInstance();bool readJson();const JsonConfig &getJsonConfig();private:QReadJson();static QReadJson * instance;JsonConfig jsonConfig;};#endif// QREADJSON_Hqreadjson.cpp内容如下:#include"qreadjson.h"QReadJson * QReadJson::instance = NULL;QReadJson *QReadJson::getInstance(){if(NULL == instance){instance = new QReadJson();return instance;}QReadJson::QReadJson(){this->readJson();}bool QReadJson::readJson(){QString strJson;QFile *file=new QFile("config.json");if(file->open(QIODevice::ReadOnly | QIODevice::Text)){strJson = file->readAll();file->close();}else{return false;}file->close();QJsonDocument jsonDom = QJsonDocument::fromJson(strJson.toUtf8()); QJsonObject jsonObject = jsonDom.object();QJsonValue jsonValue = jsonObject.value(QString("conn"));QJsonObject objectItem = jsonValue.toObject();jsonConfig.ip = objectItem["ip"].toString();jsonConfig.port = objectItem["port"].toString();jsonConfig.dataBaseVersion = objectItem["databaseversion"].toString(); jsonConfig.dataBaseName = objectItem["databasename"].toString();erName = objectItem["username"].toString();jsonConfig.passWord = objectItem["password"].toString();delete file;return true;}const JsonConfig &QReadJson::getJsonConfig(){return jsonConfig;}第三种是读取xml⽂件:<?xml version="1.0" encoding="UTF-8"?>-<data>-<database><ip>127.0.0.1</ip><port>8080</port><databaseversion>QSQLITE</databaseversion><databasename>student.db</databasename><username>root</username><password>123</password></database>qreadxml.h⽂件内容如下:#ifndef QREADXML_H#define QREADXML_H#include<QString>#include<QtXml>#include<QFile>#include<QIODevice>#include<QDomNodeList>#define XMLCONFIG QReadXml::getInstance()->getXmlConfig() typedef struct XmlConfig{QString ip; //IP地址QString port; //端⼝QString dataBaseVersion; //数据库版本QString dataBaseName; //数据库名称QString userName; //⽤户名QString passWord; //密码}XmlConfig;class QReadXml{public:static QReadXml * getInstance();bool readXML();const XmlConfig &getXmlConfig();private:QReadXml();XmlConfig xmlConfig;static QReadXml * instance;};#endif// QREADXML_Hqreadxml.cpp⽂件如下#include "qreadxml.h"QReadXml *QReadXml::instance = NULL;QReadXml *QReadXml::getInstance(){if(NULL == instance){instance = new QReadXml();}return instance;}QReadXml::QReadXml(){this->readXML();}bool QReadXml::readXML(){int countData = 0;QDomDocument dom;QFile *file=new QFile("config.xml");if(file->open(QIODevice::ReadOnly)){if(!dom.setContent(file)) //将该xml⽂件导⼊到dom中{file->close();return false;}}else{return false;}file->close();QDomElement docElem = dom.documentElement(); //返回根元素QDomNode node = docElem.firstChild(); //返回根节点的第⼀个⼦节点while(!node.isNull()) //如果节点不为空{if(node.isElement()) //如果节点是元素{QDomElement element=node.toElement();//将其转化为元素QDomNodeList list=element.childNodes();//取出该元素的所有⼦节点放到list中 //将⼦节点元素全部取出来for(int i = 0; i < list.count(); i ++){QDomNode domNode = list.at(i);if(domNode.isElement()){//取出我们所要的数据switch(i){case0:xmlConfig.ip = domNode.toElement().text();break;case1:xmlConfig.port = domNode.toElement().text();break;case2:xmlConfig.dataBaseVersion = domNode.toElement().text();break;case3:xmlConfig.dataBaseName = domNode.toElement().text();break;case4:erName = domNode.toElement().text();break;case5:xmlConfig.passWord = domNode.toElement().text();break;}}}}countData++;node = node.nextSibling(); //下⼀个兄弟节点}return countData > 0 ? true : false;}const XmlConfig &QReadXml::getXmlConfig(){return xmlConfig;}原⽂:。

C#中读写INI配置文件

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的值来代替。

selenium+python自动化测试--读取配置文件(.ini)

selenium+python自动化测试--读取配置文件(.ini)

selenium+python⾃动化测试--读取配置⽂件(.ini)前⾔:今天为什么要整理读取配置⽂件呢?原因是:公司正在做的项⽬,操作页⾯时都是根据路由跳转,由于⾃⼰经验尚浅,将url地址写在每个⽤例中,导致每次开发⼀更改路由,我就要去每个页⾯中修改url地址,光来来回回找页⾯就很费时间,所以就想到了⽤配置⽂件,将所有url地址放在⼀个⽂件中,页⾯⽤到哪个时读取哪个。

⼀、基础了解iniini配置⽂件格式如下:;这⾥是注释[section0]key0 = value0key1 = value1[section1]key2 = value2key3 = value3section不能重复,⾥⾯数据通过section去查找,每个seletion下可以有多个key和vlaue的键值对,注释⽤英⽂分号(;)configparser通过python3⾥⾯⾃带configparser模块来读取ini⽂件。

# python3import configParser如果注释⾥⾯有中⽂的话,这⾥代码跟python2是有点区别的,python2⾥⾯直接conf.read(cfgpath)就可以了,python3需要加个参数:encoding="utf-8"conf.read(cfgpath, encoding="utf-8")⼆、代码编写分别在common⽂件夹下新建配置⽂件:config.ini 和读取配置⽂件:readConf.py ,然后编写代码...1、配置⽂件:config.ini配置⽂件中按照功能模块分为 risk 、rule 、term ;其下的url地址分别代表该模块下某个功能点的url[risk];新建风险url0 = ;新建风险⽬录、导⼊风险模板url1 = xxxx[rule];新建制度⽬录url1 = xxxxx;制度审批任务模板url2 = xxxxxxx[term];新建术语url1 = xxxxxx;新建术语⽬录url2 = xxxxxx2、读取配置⽂件:readConf.py 以下是封装好的读取配置⽂件的⽅法import configparserimport osclass ReadConf():def__init__(self):curpath = os.path.dirname(os.path.relpath(__file__)) #获取配置⽂件路径cfgpath = os.path.join(curpath, "config.ini")# 创建管理对象self.conf = configparser.ConfigParser()# 读ini⽂件self.conf.read(cfgpath, encoding="utf-8")def readConf(self,param):#获取所有的section# sections = self.conf.sections()# print(sections)#获取某个sections中的所有值,将其转化为字典items = dict(self.conf.items(param))return itemsif__name__ == '__main__':test = ReadConf()t = test.readConf("risk") #传⼊sections的值print('我取某个sections下所有值 ',t)print(t['url1'])3、⽤例编写优化前代码:import unittestfrom pages.risk.createRisk import CreateRiskfrom selenium import webdriverimport timebase_url = "xxxx"class TestCreateRisk(unittest.TestCase):@classmethoddef setUpClass(cls):cls.driver = webdriver.Chrome()cls.driver.maximize_window()cls.risk = CreateRisk(cls.driver)def setUp(self):self.driver.get(base_url)def tearDown(self):self.driver.delete_all_cookies()@classmethoddef tearDownClass(cls):cls.driver.quit()def test_create_risk(self):'''新建风险点'''random = self.risk.get_random_chinese()self.risk.createRisk(random)time.sleep(3)if__name__ == '__main__':unittest.main()优化后代码:import unittestfrom pages.risk.createRisk import CreateRiskfrom selenium import webdriverfrom common.readConf import ReadConfimport timeclass TestCreateRisk(unittest.TestCase):@classmethoddef setUpClass(cls):cls.driver = webdriver.Chrome()cls.driver.maximize_window()cls.risk = CreateRisk(cls.driver)# 读取配置⽂件,传⼊sections值,cls.url = ReadConf()cls.standard_url = cls.url.readConf('risk') #这⾥传⼊risk模块# 获取配置⽂件中的urlcls.base_url = cls.standard_url['url0'] #这⾥传⼊risk模块中新建风险的url print(cls.base_url)def setUp(self):self.driver.get(self.base_url)def tearDown(self):self.driver.delete_all_cookies()@classmethoddef tearDownClass(cls):cls.driver.quit()def test_create_risk(self):'''新建风险点'''random = self.risk.get_random_chinese()self.risk.createRisk(random)time.sleep(3)if__name__ == '__main__':unittest.main()经过修改后,每次更新url地址,只需在配置⽂件中修改就好了,是不是⽅便多了~~。

C#如何实现完整的INI文件读写类

C#如何实现完整的INI文件读写类

C#如何实现完整的INI⽂件读写类作者: 魔法软糖⽇期: 2020-02-27引⾔*************************************.ini ⽂件是Initialization File的缩写,即配置⽂件。

是的系统所采⽤的存储格式。

它具有⽅便易⽤的特点,和注册表的键值有着类似的功能,各类应⽤程序也经常使⽤INI保存各种配置和选项。

在简单只需要读取的场合,调⽤WINDOWS API就⾏,但在复杂的需要可视化编辑时,就需要建⽴⾃⼰的处理类了。

如何实现⾃⼰的INI类⾸先我们需要了解◇ INI的格式◇典型INI⽂件;项⽬注释[.ShellClassInfo]InfoTip=有图标的⽂件夹;图标资源IconResource="C:\Windows\system32\SHELL32.dll",4#⽂件夹视图[ViewState]Mode=Vid=FolderType=General#尾部注释⼀个典型INI⽂件由节、注释和节下⾯的项组成,⽽项为键=值的形式。

INI⽂件的注释符号有两种,规范为;分号,实际有些地⽅⽤#井号。

◇保留注释为了在修改INI⽂件时不丢失任何信息,所以需要保存INI⽂件中所有有效元素、包括注释甚⾄是⽆效⾏。

为了实现这个⽬的,将所有注释和⽆效⾏都归属于它之后的有效元素。

以上⾯的desktop.ini为例,第⼀⾏ ;项⽬注释归属于[.ShellClassInfo]节第四⾏;图标资源归属于IconResource=项#⽂件夹视图归属于[ViewState]节最后的#尾部注释归属于整个INI⽂档的EndText◇ INIItem类表⽰INI⽂件中节点下⾯的项,它拥有三个属性:名称Name、值Value和注释Comment1///<summary>2///拥有名称、值和注释3///</summary>4public class INIItem {5///<summary>6///实例化INIItem。

c#通用配置文件读写类与格式转换(xml,ini,json)

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什么的,相对来说⽐较全⾯。

ini文件读写解决方案

ini文件读写解决方案

ini文件读写解决方案篇一:ini配置文件的读写ini配置文件的读写很多时候,我们的程序运行前需要用户做一些相关的设置,而且我们总是需要把一些配置信息保存下来,那天一直在思考怎么解决这个问题,突然就想到了在一些软件安装目录下的ini文件,然后经过查找资料发现其实ini文件既方便又实用。

下面对其使用进行总结:一、将信息从ini文件中读取到变量中首先,看一个ini文件的示例。

[连接参数]IpServer=DataBase=DB_TESTUserID=testPassword=123456;注释用英文分号以上就是一个简单的配置文档。

读取信息所用的函数为DWORD GetPrivateProfileString(LPCTSTR lpAppName, // section nameLPCTSTR lpKeyName, // key nameLPCTSTR lpDefault, // default stringLPTSTR lpReturnedString, // destination buffer DWORD nSize, // size of destination bufferLPCTSTR lpFileName // initialization file name );第一个参数为字段名,上例中的[连接参数];第二个参数键名,即变量名,上例中的IpServer、DataBase等等;第三个参数指,如果ini文件中没有前两个参数指定的字段名或键名,则将lpDefault的值赋给变量,也就是缺省值;第四个参数是接收ini文件中键名的值的CString对象,即目的缓存器;第五个参数是目的缓存器的大小;第六个参数是ini文件的完整路径。

如下:GetPrivateProfileString(L"连接参数",L"ipServer",L"", (MAX_PATH),MAX_PATH,curPath);在此额外说一点,一般来说ini文件和exe文件是放在一起的,所以这里涉及到当前路径的问题,该问题在《如何获取EXE可执行文件的所在路径》一文中讲得很清楚,而在此我用另一个全局函数也可以实现,假如我们的文件是配置.ini,则如下:CString curPath;//存储路径的CString对象AfxGetModuleFileName(AfxGetInstanceHandle(),curPath );curPath=(('\\'))+'\\';(L"配置.ini");或者还可以使lpFileName的值为:“.//配置.ini”来定位到当前目录(这种方法笔者还未测试)。

net 6 ini文件的读写方法

net 6 ini文件的读写方法

net 6 ini文件的读写方法在.NET 6中,INI文件可以通过使用``命名空间中的类进行读写。

以下是一个简单的示例,演示如何读取和写入INI文件:首先,确保你的项目已经安装了``和``这两个NuGet包。

1. 读取INI文件:```csharpusing ;using ;class Program{static void Main(string[] args){IConfiguration config = new ConfigurationBuilder().AddIniFile("") // 指定INI文件路径.Build();string settingValue = config["section:key"]; // 读取section下的key值(settingValue);}}```在上面的代码中,我们使用了`ConfigurationBuilder`来构建配置,并添加了INI文件。

然后,通过键(section:key)来获取配置值。

2. 写入INI文件:为了写入INI文件,你需要先创建一个`IConfiguration`实例,然后使用`Save`方法保存配置。

这里有一个示例:```csharpusing ;using ;using ;using ;class Program{static void Main(string[] args){IConfiguration config = new ConfigurationBuilder().AddIniFile("", optional: true) // 指定INI文件路径,可选参数默认为false,设置为true则不会抛出异常当文件不存在时。

.Build();("", optional: true); // 可以同时从多个源加载配置,这里再添加一个JSON配置文件。

python读写增删修改ini配置文件

python读写增删修改ini配置文件

python读写增删修改ini配置⽂件⼀,百度百科 .ini ⽂件是Initialization File的缩写,即初始化⽂件,是windows的系统所采⽤的存储格式,统管windows的各项配置,⼀般⽤户就⽤windows提供的各项图形化管理界⾯就可实现相同的配置了。

但在某些情况,还是要直接编辑ini才⽅便,⼀般只有很熟悉windows才能去直接编辑。

开始时⽤于WIN3X下⾯,WIN95⽤代替,以及后⾯的内容表⽰⼀个节,相当于注册表中的键。

⼆,配置程序⽰例ini配置⽂件(setting.ini)1 [txtA]2 name = comma,end,full,run3 comma = 10004 end = 35 full = 26 run = 17 default_comma = 38 default_end = 39 default_full = 210 default_run = 11112 [txtB]13 name = comma,end,full,run14 comma = 100015 end = 316 full = 217 run = 118 default_comma = 319 default_end = 320 default_full = 221 default_run = 12223 [chinese]24 name = volume,tones,speed,spokesman25 volume = 526 tones = 527 speed = 528 spokesman = 129 default_volume = 530 default_tones = 531 default_speed = 532 default_spokesman = 13334 [english]35 name = volume,tones,speed,spokesman36 volume = 537 tones = 538 speed = 539 spokesman = 140 default_volume = 541 default_tones = 542 default_speed = 543 default_spokesman = 14445 [help]4647 [about]⽰例ini配置⽂件操作程序1:使⽤configparser函数,缺点:增删、修改都是重写ini⽂件操作1import configparser2import os345# *** 初始化配置⽂件路径 *** #6 curpath = os.path.dirname(os.path.realpath(__file__)) # 当前⽂件路径7 inipath = os.path.join(curpath, "setting.ini") # 配置⽂件路径(组合、相对路径)89# *** 数据读取 *** #10 conf = configparser.ConfigParser()11 conf.read(inipath, encoding="utf-8")12# sections = conf.sections() # 获取所有的sections名称13# options = conf.options(sections[0]) # 获取section[0]中所有options的名称14# items = conf.items(sections[0]) # 获取section[0]中所有的键值对15# value = conf.get(sections[-1],'txt2') # 获取section[-1]中option的值,返回为string类型16# value1 = conf.getint(sections[0],'comma') # 返回int类型17# value2 = conf.getfloat(sections[0],'end') # 返回float类型18# value3 = conf.getboolean(sections[0],'run') # 返回boolen类型1920# *** 删除内容 *** #21# conf.remove_option(sections[0], "comma")22# conf.remove_section(sections[1])2324# *** 修改内容 *** #25 conf.set('txtB', "comma", "1000")26 conf.write(open(inipath, "r+", encoding="utf-8")) # r+模式272829# print(conf.items(sections[0]) )⽰例ini配置⽂件操作程序2:使⽤configobj 函数1from configobj import ConfigObj2# *** 配置⽂件预处理 *** #3 config = ConfigObj("setting.ini",encoding='UTF8')45# *** 读配置⽂件 *** #6# print(config['txtB'])7# print(config['txtB']['name'])89# *** 修改配置⽂件 *** #10# config['txtB']['comma'] = "Mufasa"11# config.write()1213# *** 添加section *** #14# config['txtC'] = {}15# config['txtC']['index0'] = "wanyu00"16# config.write()。

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

用系统函数读写ini配置文件
一INI文件基础
文件扩展名为ini的文件常用于操作系统、软件等初始化或进行参数设置。

ini是initial的缩写。

这类文件可以用文本编辑器(如记事本)打开、编辑。

文件格式
节/段sections
[section]
参数/键名parameters
name=value
注解comments
注解使用分号表示(;)。

在分号后面的文字,直到该行结尾都全部为注解。

;comment text
示例
如QQ安装目录下有一个kernelInfo.ini文件,里面的内容。

[kernel]
version=788
packetname=QQPetKernel.EXE
ini用途
编写软件的时候需要将一些初始化的信息写入到一个配置文件中,软件启动的时候从这个配置文件中读取这些初始化的信息。

软件中的一些过程数据也需要保存到ini文件中。

现在软件大都将这些配置信息写到XML中,因为XML的树形描述层次结构性清晰。

这就涉及到XML 的解析,可以自己写解析方法,也可以用第三方库(如TinyXML、CMarkup等)来解析XML。

更多类容可以参考/u/5135093875
二应用程序的ini读写
系统提供给了读写ini文件的函数,都是以GetPrivateProfile开头的,常用的有下面3个。

作一个简要介绍。

GetPrivateProfileString
DWORD GetPrivateProfileString(
LPCTSTR lpAppName,//points to section name段名
LPCTSTR lpKeyName,//points to key name键名
LPCTSTR lpDefault,//points to default string默认的键值,这个参数不能为
NULL。

如果在ini文件中没有找到lpKeyName,就将赋值lpDefault,给lpReturnedString LPTSTR lpReturnedString,//points to destination buffer指向缓冲区的指针,用于保存键值
DWORD nSize,//size of destination buffer缓冲区的大小
LPCTSTR lpFileName//points to initialization filename ini文件的路径
);
功能:读取对应段和键的值。

返回值:
返回复制到缓冲区的字符个数,并不包括字符串结尾的NULL。

如果lpAppName和lpKeyName都不为空,并且键值的长度大于了缓冲区的长度,那么就将键值切断,并在末尾添加’\0’字符,返回nSize-1。

如果lpAppName或lpKeyName为空,并且键值的长度大于了缓冲区的长度,那么就将键值切断,并在末尾添加两个’\0’字符,返回nSize-2。

WritePrivateProfileString
BOOL WritePrivateProfileString(
LPCTSTR lpAppName,//pointer to section name段名
LPCTSTR lpKeyName,//pointer to key name键名
LPCTSTR lpString,//pointer to string to add写入的键值
LPCTSTR lpFileName//pointer to initialization filename ini文件的路径
);
功能:在对应段名和键名后写入键值。

如果在对应的硬盘目录下没有找到该ini文件,将在对应目录创建该ini文件。

如果ini文件中没有对应的段和键,将创建对应的段和键名。

返回值:成功TRUE失败FALSE
GetPrivateProfileInt
UINT GetPrivateProfileInt(
LPCTSTR lpAppName,//address of section name段名
LPCTSTR lpKeyName,//address of key name键名
INT nDefault,//return value if key name is not found如果lpKeyName没有找到就返回这个默认值LPCTSTR lpFileName//address of initialization filename ini文件的路径
);
功能:对其对应段名和键名后的键值,并转换为对应整型。

返回值:
如果找到该键值,就返回对应的UINT值。

如果没有就返回nDefault的值。

如果键值小于0,就返回0。

因为返回值是无符号的整数。

相关文档
最新文档