c 读写config.ini

项目需要,今天写了个加载config.ini文件的模块和生成.xml格式日志文件模块


由于 .ini 文件的主要属性是key=value,所以一看就想到了使用map来存放里面的内容,但是c语言中并没有提供这样的容器,而自己实现一个map有点难,

所以就转换了思路,使用一个链表来存放键值对,如果config.ini内容太多,在效率上链表肯定是有损失,因为每次的查找一个key ,都要遍历整个链表。


链表结点结构为 struct node { char *key ; char *value; struct node *next };

其中主要的方法为:char *getValue(list *lst,const char *key) 而这里需要使用到strcmp(temp->key,key),需要注意的是strcmp相等返回0,而我在代码里写了if(strcmp()) 导致出错,调试了好长时间才找出错误所在,真让人纠结。

而读config.ini并把内容存放进链表的方法中,主要是读入每一行,判断是否以‘#’ 开头,为注释 ,如果不是,使用strtok计算出key和value

while(!feof(fp))

{

fgets(temp,100,fp)

if('#' == temp[0]) continue;

key = strtok(temp,delims)

value = strtok(NULL,delims);

addNode(&lst,key,value)

}


fclose(fp);



在生成 xml日志文件的过程 ,主要使用了 如何生成以时间为前缀的文件名

struct tm *newtime;

time_t tm;

tm = time(NULL);

char tmpbuf[100];

newtime = localtime(&tm);

strftime(tmpbuf,100,"%Y-%m-%d %H-%M-%S-",newtime);

strcat(tmpbuf,"caselog.xml");



fprintf(fp,"

把__FILE__   __func__  __LINE__ 存放在变量中 sprintf(file,"%s",__FILE__)  sprintf(line,"%d",__LINE__);

fprintf() 是不会换行的

fputs() 是自动换行的


关闭文件前使用fflush(fp) 再fclose(fp);


你可能感兴趣的:(c/c++)