zoukankan      html  css  js  c++  java
  • 简单配置文件的读取以及保存。

    #define LINE_BUF_SIZE 128
    char read_upgrade_version(char *file_path,const char *type, char *value)
    {
        char line[LINE_BUF_SIZE] = {0};
        FILE *fp = NULL;
        char *pType = NULL;
    
        fp = fopen(file_path, "r");
        if (!fp) {
            printf("Can't open %s",file_path);
            return -1;
        }
        while (!feof(fp)) {
            if(fgets(line, LINE_BUF_SIZE, fp) == NULL) {  
                break;  
            }
            pType = strstr(line, "=");
            if(pType == NULL) {
                continue;
            }
            pType = strstr(line, type);
            if (pType) {
                pType ++;
                pType += strlen(type);
                if (pType) {
                    strcpy(value, pType);
                    break;
                }
            }
        }
    
        fclose(fp);
        return 0;
        
    }
    #define LINE_NUM 12
    int save_upgrade_version(char *file_path,const char *type, char *value)
    {
        int i;
        char flag = 0,cnt = 0;
        struct info_t info[LINE_NUM];
        char linebuffer[LINE_BUF_SIZE] = {0};
        char buffer[LINE_BUF_SIZE * 2];
        char *pType = NULL;
        FILE *fp = fopen(file_path, "r");
        if(fp == NULL)
        {
            printf("open error");
            return 1;
        }
        for(i = 0 ; i < LINE_NUM ; i++)
        {
            char *ret = fgets(linebuffer, sizeof(linebuffer), fp);
            if(ret == NULL)
            {
                break;
            }
            pType = strstr(linebuffer, "=");
            if(pType == NULL) {
                continue;
            }
            memcpy(info[i].type, linebuffer, pType - linebuffer);
            info[i].type[pType - linebuffer] ='';
            strcpy(info[i].value, pType + 1);
            
            if(!strcmp(info[i].type, type))
            {
                strcpy(info[i].value,value);
                info[i].value[strlen(value)] = '
    ';
                info[i].value[strlen(value) + 1] = '';
                flag = 1;
            }
            memset(linebuffer,0,sizeof(linebuffer));
            cnt++;
        }
        fclose(fp);
        
        fp = fopen(file_path,"w");
        if(fp == NULL)
        {
            return 1;
        }
        if(flag == 0) {
            strcpy(info[cnt].type,type);
            strcpy(info[cnt].value,value);
            info[i].value[strlen(value)] = '
    ';
            info[i].value[strlen(value) + 1] = '';
            cnt++;
        }
        for(i = 0 ; i < cnt ; i++)
        {
            memset(buffer,0,sizeof(buffer));
            sprintf(buffer,"%s=%s",info[i].type,info[i].value);
            fprintf(fp,"%s",buffer);
        }
    
        fclose(fp);
        return 0;
    }

    目前配置文件内容使用“=”号分割。保存时采用的是读取整个文件内容,修改对应行后再保存,可以保存没有存在的字段。如果有很多行的话这个就不适用了。

    这个代码只适用与小量的配置保存与更改需要。

  • 相关阅读:
    BZOJ4327 : JSOI2012 玄武密码
    BZOJ4303 : 数列
    BZOJ1077 : [SCOI2008]天平
    BZOJ1829 : [Usaco2010 Mar]starc星际争霸
    BZOJ1770 : [Usaco2009 Nov]lights 燈
    BZOJ3012 : [Usaco2012 Dec]First!
    BZOJ4320 : ShangHai2006 Homework
    BZOJ4311 : 向量
    BZOJ3075 : [Usaco2013]Necklace
    BZOJ4304 : 道路改建
  • 原文地址:https://www.cnblogs.com/fogcell/p/8253182.html
Copyright © 2011-2022 走看看