C++ INI配置文件
- 格式:doc
- 大小:55.50 KB
- 文档页数:9
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配置文件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文件写法
INI文件,全称初始化文件(Initialization File),是一种常用的配置文件格式,主要用于存储程序运行所需的配置信息。
INI 文件的写法相对简单,主要包括节(section)、键(key)和值(value)三个部分。
下面详细介绍INI文件的写法。
1. 节(section):INI文件中的配置信息通常按照功能或类别进行分组,这些分组就是节。
每个节都有一个唯一的名称,用方括号括起来。
2. 键(key):节中的配置信息需要用键来标识,键也有一个唯一的名称,用等号分隔。
键的名称可以是任意字符串,但建议使用有意义的英文单词或缩写。
3. 值(value):键所对应的具体配置信息就是值。
值可以是字符串、数字或其他数据类型。
4. 注释:INI文件中可以使用井号(#)表示注释,注释内容不会被解析。
5. 空行:INI文件中的空行会被忽略,可以用来分隔不同的配置信息。
6. 分行:如果一个值过长,需要分行显示,可以使用反斜杠实现。
7. 转义字符:INI文件中的转义字符需要使用双反斜杠表示。
8. 内置变量:INI文件中可以使用一些内置变量,
如%APPDATA%、%USERPROFILE%等,表示特定目录下的文件路径。
INI文件的基本写法包括节、键和值三个部分,可以通过组合这些基本元素来表示复杂的配置信息。
在实际使用中,可以根据需要创建多个节和键,以满足不同程序的配置需求。
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作为第一个参数来获取分割后的第二个部分。
在C++中,`WritePrivateProfileSection`函数通常用于写入INI文件中的指定节(section)信息。
INI文件是一种配置文件格式,它由多个节组成,每个节包含多个键值对。
`WritePrivateProfileSection`函数可以将一整个节的信息写入INI文件中。
以下是`WritePrivateProfileSection`函数的基本用法和示例:```cpp#include <Windows.h>int main() {LPCSTR section = "MySection";LPCSTR data = "[Key1]=Value1\n[Key2]=Value2\n[Key3]=Value3";// 写入INI文件BOOL result = WritePrivateProfileSection("MySection", data, "C:\\path\\to\\file.ini");if (result) {// 写入成功// 可以在此处添加处理成功的代码} else {// 写入失败// 可以在此处添加处理失败的代码}return 0;}```在上面的示例中,我们使用`WritePrivateProfileSection`函数将指定的`data`信息写入了INI文件中的`MySection`节。
其中,`"C:\\path\\to\\file.ini"`是INI文件的路径,`data`包含了要写入的键值对信息,每个键值对之间使用换行符`\n`分隔。
在实际使用中,需要注意以下几点:- 参数`section`指定了要写入的节的名称。
- 参数`data`包含了要写入的键值对信息,格式为`"key1=value1\nkey2=value2\n..."`。
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配置⽂件(⼩结)我们可能经常⽤到配置⽂件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读取配置文件的方法在C语言中读取配置文件是非常常见的操作,它可以方便地管理程序的一些参数和选项,让程序更加灵活和易于维护。
下面是一些常见的方法:1. 使用标准库函数fopen和fscanf这是最常见的方法之一,使用标准库函数fopen和fscanf来逐行读取配置文件中的内容。
具体实现步骤如下:a. 使用fopen打开配置文件,获取文件指针。
b. 使用fscanf读取每一行的内容,根据具体的配置格式进行解析。
c. 关闭文件指针。
示例代码:FILE *fp;char buf[1024];int value;fp = fopen('config.ini', 'r');if (fp == NULL){printf('Cannot open config file.');return -1;}while (fgets(buf, sizeof(buf), fp) != NULL){if (sscanf(buf, 'key=%d', &value) == 1){// 解析成功,使用读取到的值进行后续操作printf('value=%d', value);}}fclose(fp);2. 使用ini配置文件解析库ini配置文件解析库是一个专门用来解析ini配置文件的库,它能够快速、简单地读取和修改ini文件中的配置项。
具体实现步骤如下:a. 下载并安装ini解析库。
b. 使用ini_parse函数读取配置文件。
c. 使用ini_get函数获取配置项的值。
示例代码:#include 'ini.h'int handler(void* user, const char* section, const char* name,const char* value)if (strcmp(section, 'config') == 0 && strcmp(name, 'key') == 0){// 获取配置项的值int* pvalue = (int*)user;*pvalue = atoi(value);}return 1;}int main(){int value;if (ini_parse('config.ini', handler, &value) < 0){printf('Cannot open config file.');return -1;}printf('value=%d', value);return 0;3. 使用XML配置文件解析库XML配置文件解析库是一个专门用来解析XML格式的配置文件的库,它能够解析复杂的XML文件,并且提供了灵活的配置项操作方式。
3DMAX考试试题第001题:(d)在[对象尾性]设置面板中,以下哪个选项状态的改变会影响渲染结果?C [透明]C [显示为外框]a [背面消隐]C [对摄影机可见]第002题:(b)对于风系练中下列说法错误的是。
C风系统是一个辅助对象,可以在场景中添加风力效果。
6 风系统可以通过各项参数(如风速、阵风、影响范围等)来控制风力效果,但这些参数不能进行动画控制。
C辅助对象的方向决定了风力的方向。
C如果想要对风力的方向进行动画控制,可以通过对辅助对象的图标进行动画设置,从而实现改变风力方向的效果。
第003题:(c)在以下的务边形编辑合令中,能够生成新的多边形同格的是。
@ [塌陷]C [翻转]C [切割]C [松弛]第004题:(a)使用一个对象来控制另外一个对象的运动、放转或缩放变换的修改器是修改器。
C链接变换修改器。
6变换修改器。
C替换修改器。
C路径变形修改器。
第005题:(d)6进入多边形子对象层级,选择一个要挤出的多边形面,应用[挤出命令,然后选择下一个多边形面挤出,以此类推,分别选择每个多边形要挤出的面,完成目标造型。
C 进入多边形子对象层级,配合Ctl 键逐个选中全部要挤出的多边形面,然后使用[挤出命令得到目标造型。
C 进入边子对象层级,选择任意一个要挤出的多边形面的一条径向(指向圆柱体上表面圆心)的边,在修改面板的选择卷展栏下点击环形按钮,然后点击鼠标右键,在四元菜单上选择转换到面命令,为选定的面应用挤出命令得到目标造型。
C 进入多边形子对象层级,先框选出圆柱上面的全部多边形面,再按住At 键以交叉选择方式框选上表面圆心点,然后使用【挤出命令得到目标造型。
第006题:(c)使用[曲面]修改置生成的对象类型为 ●C [NURBS]@[NURMS]C [面片]C [网格]第007题:(c)如图0601A 001所示,将创建的动画输出到电视中,应该选挥渲染场景对话框中[公用参数]卷 展栏下「选项]组的 命令,否则百面会出现抖动现象。
dsw, aps, clw, plg这些文件都可以删除。
只保留 H,C,CPP,DSP,RC,剩余文件去除只读属性,其余全部删除。
然后打开DSP 有提示选 YES,就可以了*.dsp(DeveloperStudio Project):是VC++的工程配置文件,比如说你的工程包含哪个文件,你的编译选项是什么等等,编译的时候是按照.dsp的配置来的。
*.dsw(DeveloperStudio Workspace):是工作区文件,用来配置工程文件的。
它可以指向一个或多个.dsp文件。
*.clw:是 ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下.有时候ClassWizard出问题,手工修改CLW文件可以解决.如果此文件不存在的话,每次用ClassWizard的时候绘提示你是否重建。
*.opt:工程关于开发环境的参数文件,如工具条位置等信息。
*.aps:(AppStudio File),资源辅助文件,二进制格式,一般不用去管他。
*.rc:资源文件。
在应用程序中经常要使用一些位图、菜单之类的资源, VC中以rc为扩展名的文件称为资源文件, 其中包含了应用程序中用到的所有的windows资源, 要指出的一点是rc文件可以直接在VC集成环境中以可视化的方法进行编辑和修改。
*.plg:是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件,一般用处不大),在Tools->Options里面有个选项可以控制这个文件的生成。
*.hpj:(Help Project)是生成帮助文件的工程,用microsfot Help Compiler可以处理。
*.mdp:(Microsoft DevStudio Project)是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的DSP格式。
*.bsc:是用于浏览项目信息的,如果用Source Brower的话就必须有这个文件。
ini文件用法
INI文件是一种配置文件,通常用于存储应用程序或系统的配置信息。
INI文件由节(section)、键(key)和值(value)组成,通常采用“分节分条”的组织方式。
以下是INI文件的基本用法:
创建INI文件:首先需要创建一个INI文件,可以在文本编辑器中手动创建,也可以使用编程语言中的相关函数或库来创建。
添加节:在INI文件中,节是用来组织配置信息的区域,每个节都以方括号([])括起来。
可以在INI文件中添加多个节,以便对配置信息进行分类管理。
添加键和值:在每个节中,可以添加多个键值对。
键和值之间使用等号(=)分隔,并使用分号(;)表示注释。
例如,[section1] key1=value1; key2=value2。
读取INI文件:读取INI文件可以使用编程语言中的相关函数或库来实现。
根据INI文件的格式,逐行读取文件内容,并解析节、键和值。
修改INI文件:可以直接编辑INI文件来修改配置信息,也可以使用编程语言中的相关函数或库来读取和修改配置信息。
修改完成后,保存INI文件即可。
删除INI文件:如果不再需要INI文件,可以直接将其删除。
需要注意的是,删除INI文件可能会影响到应用程序或系统的正常运行。
需要注意的是,INI文件的语法比较简单,容易受到一些安全风险的影响。
因此,在读取和修改INI文件时,需要特别注意文件的来源和内容的合法性,以避免安全漏洞。
WriteProfileString 函数,WritePrivateProfileString 函数, WritePrivateProfileStruct 函数,操作INI/chinabinlang/article/details/6424885Wr iteProfileString 函数:背景: 调用了WriteProfileString, 却不知道该配置信息到底是注册表中,还是在INI文件中. 经过在网上查询, 在windows的目录下找到与程序名同名的INI文件.原因:1/调试跟踪到CWinApp::WriteProfileString中间,发现了这个函数:return ::WritePrivateProfileString(lpszSection, lpszEntry, lpszValue,m_pszProfileName);然后根据m_pszProfileName的名字as.ini(因为我的应用程序名字为as.exe)查找,最后在C:/WINDOWS下查找到了as.ini的文件,打开正好;2/ 事实上WriteProfileString可以往注册表写也可往INI 文件写,关键是SetRegistryKey,如果执行了SetRegistryKey,那么就会写往注册表,如果没有,就会写往INI文件,请看MSDN 说明:3/如果你要写文件,用WritePrivateProfileString吧,不要用那个WriteProfileString./s/blog_3f59eb3d 010006wr.htmlWritePrivateProfileString 函数:GetPrivateProfileString函数对应;WritePrivateProfileStruct 函数#include<iostream>#include <windows.h>using namespace std;struct Data{int n;char c[260];};int main(){Data d1,d2;d1.n=10;strcpy(d1.c,"hello");WritePrivateProfileStruct( "MI", "DATA", &d1, sizeof(Data), "f:\\a.ini" );//markGetPrivateProfileStruct( "MI", "DATA", &d2, sizeof(Data), "f:\\a.ini" );//markcout<<d2.n<<endl<<d2.c<<endl;return 0;}转一篇文章:VC操作INI文件INI文件简介在我们写程序时,总有一些配置信息需要保存下来,以便在下一次启动程序完成初始化,这实际上是一种类持久化。
Qt基础之配置⽂件 在项⽬开发中,配置⽂件通常分为三种:ini⽂件、xml⽂件和json⽂件,个⼈认为三种⽂件的区别在于:ini⽂件记录⽅便、格式简单但不便于扩展;xml⽂件和json⽂件扩展性强,能够记录更复杂的配置⽂件,但格式相对复杂,特别是**对重复项的记录有优势**。
因此,在选择配置⽂件时,如⽂件内容较少,⽆(少)重复记录项,可选择ini⽂件,若⽂件内容多、逻辑层次复杂、需要重复记录多组数据或者后期后期可能需要扩展多层关系,可选择xml或json⽂件。
1.INI⽂件Qt通过QSettings类读写ini⽂件(但是QSetting还可以读取其它类型的配置⽂件,例如:注册表)头⽂件:QSetting.h,QSetting读写ini⽂件的步骤为: * 通过路径名称打开⽂件并设定为ini⽂件格式* 读/写数据* 关闭⽂件,删除句柄Qt读⽂件⽰例如下: 1//打开⽂件并指定为ini格式2 QSettings* configIni = new QSettings(file_path, QSettings::IniFormat);3 QString qTemp = "";4//读指定节点的指定数据,其中“Log”为节点,save_days为具体数据项5 logDays = configIni->value("Log/save_days").toInt();6 qTemp = configIni->value("Log/print_debug").toString();7 printDbgLog = pare("true", Qt::CaseInsensitive) == 0 ? true : false;8//删除指针,此处未关联⽗对象,必须⼿动删除,否则有内存泄露风险9delete configIni;View Code Qt写⽂件⽰例如下:1//打开⽂件2 QSettings* configIni = new QSettings(filePath, QSettings::IniFormat);3 QString qTemp = "";4//写⼊数据,必须指定写⼊节点和值5 configIni->setValue("Public/remove_time", removeTime); //定时任务执⾏时间6 configIni->setValue("Log/save_days", logDays); //⽇志保存天数7 configIni->setValue("Log/print_debug", "true");8else9 configIni->setValue("Log/print_debug", "false");10delete configIni;View Code2.XML⽂件 Qt有多种⽅法读取xml⽂件,有⼈在⽹上总结了⼏种⽅式,具体,我使⽤的是DOM的⽅式,这种⽅式的有点在于理解简单,读写完全按照xml⽂件的层级操作即可;缺点则是需要将⽂件完全放⼊内存后才可读写,也就是说,对于⾮常⼤的xml⽂件,这不是⼀种理想的处理⽅式。
INI文件在系统配置及应用程序参数保存与设置方面,具有很重要的作用,所以可视化的编程一族,如VB、VC、 VFP、Delphi等都提供了读写INI文件的方法,其中Delphi中操作INI文件,最为简洁,这是因为Delphi3提供了一个TInifile 类,使我们可以非常灵活的处理INI文件。
一、有必要了解INI文件的结构:;注释[小节名]关键字=值...INI文件允许有多个小节,每个小节又允许有多个关键字,“=”后面是该关键字的值。
值的类型有三种:字符串、整型数值和布尔值。
其中字符串存贮在INI 文件中时没有引号,布尔真值用1表示,布尔假值用0表示。
注释以分号“;”开头。
二、定义1、在Interface的Uses节增加IniFiles;2、在Var变量定义部分增加一行:myinifile:Tinifile;然后,就可以对变量myinifile进行创建、打开、读取、写入等操作了。
三、打开INI文件myinifile:=Tinifile.create(program.ini);上面这一行语句将会为变量myinifile与具体的文件program.ini建立联系,然后,就可以通过变量myinifile,来读写program.ini文件中的关键字的值了。
值得注意的是,如果括号中的文件名没有指明路径的话,那么这个Program.ini文件会存储在Windows目录中,把Program.ini文件存储在应用程序当前目录中的方法是:为其指定完整的路径及文件名。
下面的两条语句可以完成这个功能:Filename:=ExtractFilePath(Paramstr(0))+program.ini;myinifile:=Tinifile.Create(filename);四、读取关键字的值针对INI文件支持的字符串、整型数值、布尔值三种数据类型,TINIfiles类提供了三种不同的对象方法来读取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的值可以试一试哟那么有读取了,上图是读取一个节点,那么如果很多节点写起来就麻烦了很多,我们把这个读的方法抽取出来读取的方式我们搞定了,那么我们来画个窗体做写入事件。
写入的系统函数写入的系统函数写入的系统函数写入方法写入也搞定了,那在窗体界面上我们看到了有一个单选框是否保存密码,大家应该知道怎么做了吧?就到这里~~有问题可以回复,有时间就解答。
WCNSS_qcom_cfg.iniWIFI 配置⽂件参数详细解析STA 相关的⼀般配置SCAN 相关配置参数含义最⼩值最⼤值默认值gNeighborLookupThreshold 1 触发roam scan 发⽣的条件在WCNSS_qcom_cfg.ini ⽂件中gNeighborLookupThreshold=78,表⽰当信号⼩于-78db 时将触发roam scan 。
0120RTSThreshold 主要⽤于解决"隐藏节点"问题的,参考WmmIsEnabled WMM 已启⽤:1 –启⽤, 仅QoS ,2 –启⽤, 但不启⽤QoS ,0 –⾃动,加⼊任何AP020BandCapability ⾸选频段,0:both ,1:2.4G only , 2:5G only 021gTxBFEnable 启⽤Tx 波束成形1Intf0MacAddress 分配的MAC 地址-在插⼊NV 项⽬之前⼀直使⽤地点。
有4个,f0-f3gNumRxAnt 将1 x 1设置为默认天线配置。
122gNthBeaconFilter信标过滤频率(以信标间隔为单位)。
每个第N 个信标都会检查其内容的变化信标框架。
如果信标帧发⽣变化,帧被转发到主机。
25510McastBcastFilter ⽤于过滤多播和⼴播Rx 数据包的标志值:0-不过滤,1-过滤所有多播,2-过滤所有⼴播,3-过滤所有多播和⼴播030hostArpOffload 启⽤/禁⽤HostARPOffload 功能以卸载ARP 回复固件。
有关详细信息gEnableApProt 802.11n 保护标志gFixedRate固定传输数据速率;0表⽰⾃动速率调整。
0gDisableIntraBssFwd BSS 内部转发0g11dSupportEnabled 启⽤/禁⽤11d ⽀持011gNeighborScanTimerPeriod CCX ⽀持和快速过渡扫描中的单个通道3300200gShortGI20Mhz gShortGI40Mhz为HT20、HT40启⽤短保护间隔gAPAutoShutOffIf there is no activity for this period, then SAPdisconnectswith that STA. Enable/disable values are in seconds ⾃动关机值,以秒为单位。
用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"项目添加应用程序的全路径来实现,这要比其它两种方法简便的多,而且也比较安全。