C 在ini文件中写入
我正在使用C 在ini文件中写入,c,linux,C,Linux,我正在使用iniparser为1.Program使用ini文件,该程序创建文件并生成其名称,这很好,。我有一个2.程序,它应该从我试图使用ini文件的第一个程序中“获得一些如何”名称,但它不起作用,下面是ini的一个示例: # # This is an example of ini file # [RECORDING] sampleFrequency = 44100 ; # Sample Frequency folderName = RECORDS ; # Name of the fo
iniparser
为1.Program使用ini文件,该程序创建文件并生成其名称,这很好,。我有一个2.程序,它应该从我试图使用ini文件的第一个程序中“获得一些如何”名称,但它不起作用,下面是ini的一个示例:
#
# This is an example of ini file
#
[RECORDING]
sampleFrequency = 44100 ; # Sample Frequency
folderName = RECORDS ; # Name of the folder, where the records will be saved
lengthInSec = 5 ; # the duration of the recording in Seconds
1.节目:
iniparser_set(ini,"RECORDING:fileName","WHATEVER");// this doesn't work nothing happens not even an warning
你知道我该怎么做吗
更新
在**jxh**之后,我尝试了以下答案:
FILE *finp= NULL;
finp=fopen("initialization.ini","w");
dictionary * ini ;
iniparser_dump_ini(ini,finp); /// the program crashes here
iniparser_set(ini,"RECORDING:fileName","WHATEVER");
iniparser_dump(ini, stdout);
fclose(finp);
文件还没有从文档中写入:
void iniparser_dump_ini (dictionary *d,
FILE *f
)
将字典保存到可加载的ini文件
因此,您需要使用fopen()
打开一个可写文件,并将指针传递到iniparser\u dump\u ini()
,以写出词典。然后fclose()
文件
显然,该库的设计主要围绕着将一个“ini”文件读入字典。set和unset命令仅影响内存中的数据结构
您的更新试图使用未初始化的变量ini
,因此您将获得未定义的行为
如前所述,该库显然是围绕读取“ini”文件而设计的。因此,首先需要从一个“ini”文件开始。如果必须从C代码开始执行所有操作,则从一个空文件开始:
const char ininame[] = "initialization.ini";
FILE *finp = fopen(ininame, "w");
fclose(finp);
然后,初始化字典
dictionary *ini = iniparser_load(inifile);
iniparser_set(ini,"RECORDING:fileName","WHATEVER");
那你想怎么查字典就怎么查吧
dictionary *ini = iniparser_load(inifile);
iniparser_set(ini,"RECORDING:fileName","WHATEVER");
然后写出来:
finp = fopen(inifile, "w");
iniparser_dump_ini(ini, finp);
fclose(finp);
从文件中:
void iniparser_dump_ini (dictionary *d,
FILE *f
)
将字典保存到可加载的ini文件
因此,您需要使用fopen()
打开一个可写文件,并将指针传递到iniparser\u dump\u ini()
,以写出词典。然后fclose()
文件
显然,该库的设计主要围绕着将一个“ini”文件读入字典。set和unset命令仅影响内存中的数据结构
您的更新试图使用未初始化的变量ini
,因此您将获得未定义的行为
如前所述,该库显然是围绕读取“ini”文件而设计的。因此,首先需要从一个“ini”文件开始。如果必须从C代码开始执行所有操作,则从一个空文件开始:
const char ininame[] = "initialization.ini";
FILE *finp = fopen(ininame, "w");
fclose(finp);
然后,初始化字典
dictionary *ini = iniparser_load(inifile);
iniparser_set(ini,"RECORDING:fileName","WHATEVER");
那你想怎么查字典就怎么查吧
dictionary *ini = iniparser_load(inifile);
iniparser_set(ini,"RECORDING:fileName","WHATEVER");
然后写出来:
finp = fopen(inifile, "w");
iniparser_dump_ini(ini, finp);
fclose(finp);
这两个函数应该保存和读取ini文件。本例使用工作文件夹,但可以提供绝对路径,如“/home/some user/some folder/some program.ini”
#包括
#包括
#包括
//模块变量
国际主题;
国际单项体育联合会;
内部错误;
长时间;
字符标题[80];
字符acLastTopicHeading[80];
char acItemHeading[80];
焦腺嘌呤[160];
半腺体[160];
char-acTempPath[160];
文件*pFIniFile;
文件*pFTempIni;
//萨维尼斯
//保存配置字符串
int saveinis(char*pacPath,char*pacTopic,char*pacItem,char*pacValue){
整数长度;
整数长度;
iError=0;
acLastTopicHeading[0]='\0';
strcpy(腺泡状,pacPath);
strcpy(acTempPath,pacPath);
strcat(acTempPath,“temp”);
//为主题添加括号
strcpy(标题“[”);
strcat(acTopicHeading,pacTopic);
strcat(acTopicHeading,“]\n”);
strcpy(acitem heading,pacItem);
strcat(项目标题“=”);
iItemLength=strlen(项目标题);
iValueLength=strlen(pacValue);
iFoundTopic=0;
iFoundItem=0;
if((pFTempIni=fopen(acTempPath,“w”))==NULL){
printf(“无法打开临时ini文件以写入设置\n”);
iError=1;
返回(iError);
}
//尝试打开当前配置文件进行读取
if((pFIniFile=fopen(acIniPath,“r”)!=NULL){
//从配置文件中读取一行,直到EOF
while(fgets(aciline,159,pFIniFile)!=NULL){
//已找到该项,请继续读取文件以结束
如果(iFoundItem==1){
fputs(阿奇林、普坦比尼);
继续;
}
//尚未找到主题
如果(iFoundTopic==0){
if(strcmp(acTopicHeading,acIniLine)==0){
//找到了主题
iFoundTopic=1;
}
fputs(阿奇林、普坦比尼);
继续;
}
//尚未找到该项目
如果((iFoundItem==0)和&(iFoundTopic==1)){
if(strncmp(acItemHeading,acililine,iItemLength)==0){
//找到物品了吗
iFoundItem=1;
如果(iValueLength>0){
FPUT(acItemHeading、pFTempIni);
fputs(pacValue,pFTempIni);
fputs(“\n”,pFTempIni);
}
继续;
}
//如果换行符或[,则主题已结束
//因此,将项目添加到主题中
如果((acIniLine[0]='\n')| |(acIniLine[0]='[')){
iFoundItem=1;
如果(iValueLength>0){
FPUT(acItemHeading、pFTempIni);
fputs(pacValue,pFTempIni);
fputs(“\n”,pFTempIni);
}
fputs(“\n”,pFTempIni);
如果(腺嘌呤[0]='['){
fputs(阿奇林、普坦比尼);
}
继续;
}
//如果未找到项目,请将行写入临时文件
如果