⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getcfg.cpp

📁 基于普通手机的短信编程源码
💻 CPP
字号:
#include <vcl.h>
#include <string.h>
#include <stdio.h>
#include <dir.h>

void get_file_name(char * full_path_name,char * file_name)
{
        int p;

        p=strlen(full_path_name);
        while( (full_path_name[p-1]!='\\')&&(p!=0) )
                p--;
        sprintf(file_name,"%s",full_path_name+p);
}

void get_file_name1(char * full_path_name,char * file_name)
{
        int p;

        p=strlen(full_path_name);
        while( (full_path_name[p-1]!='/')&&(p!=0) )
                p--;
        sprintf(file_name,"%s",full_path_name+p);
}

/*************GET_CFG***************/
/****************************************** 除去注释内容******************************************/extern char * FilterRemark(char *src, char *dest){    char *ptr;    ptr=strtok(src, "#");    strcpy(dest, ptr);    return dest;}/************************* 过滤回车符**************************/static char *FilterCR(char *str){    char *ptr;    ptr = strchr(str, '\n');    if (ptr != NULL)        *ptr = '\0';    return str;}/************************ 删除前后空格*************************/static char *alltrim(char *str){    static char buffer[81];    char *ptr;    int i, j, k;    for (i = 0; ((str[i] == ' ') || (str[i] == '\t'))&& str[i] != '\0'; i++);    for (j = strlen(str) - 1;        ((str[j] == ' ') || (str[j] == '\t'))&& j >= 0 ; j--)        str[j]='\0';    sprintf(buffer,"%s",str+i);    sprintf(str,"%s",buffer);    return str;}/****************************************** *取配置文件中设置项的值 *cfg_file  配置文件全路径名 *cfg_seg   段名 *cfg_item  设置项名称 *value     设置项的值 *返回码    0: 成功 *         -1: 配置文件不存在 *         -2: 未找到配置节 *         -3: 未找到配置项 *******************************************/int GetCfgItem(char * cfg_file,char *cfg_seg, char *cfg_item, char *value){    FILE *fp;    char item[256], buffer[256], buf[100], *ptr;    int flag;    if ((fp = fopen(cfg_file, "r+")) == NULL)         return -1;    flag = 0;    sprintf(buf, "[%s]", cfg_seg);    while (fgets(buffer, 256, fp) != NULL)    {        FilterRemark(buffer, item);        if (strstr(item, buf) != NULL)        {            flag = 1;            break;        }    }    if (flag != 1)    {        fclose(fp);        return -2;    }    sprintf(buf, "%s=", cfg_item);    flag = 0;    while(fgets(buffer, 256, fp) != 0)    {        FilterRemark(buffer, item);        FilterCR(item);        if (strstr(item, buf) != NULL)        {            ptr = strchr(item, '=');            strcpy(value, alltrim(ptr+1));            flag = 1;            break;        }        else        if (strchr(item, '[') != NULL && strchr(item, ']') != NULL)        {            flag = 2;            break;        }    }    fclose(fp);    if (flag != 1)        return -3;    else    {       alltrim(value);       return 0;    }}/****************************************** *修改配置文件中设置项的值 *cfg_file  配置文件全路径名 *cfg_seg   段名 *cfg_item  设置项名称 *value     设置项的值 *返回码    0: 成功 *         -1: 配置文件不存在 *         -2: 未找到配置节 *         -3: 文件不能写 *******************************************/int ModifyCfgItem(char *cfg_file,char *cfg_seg, char *cfg_item, char *value){    FILE *fp,*fp1;    char item[256], buffer[256], buf[81], old_value[50], *ptr,tmp_file[100];    char tmp_buff[256];    int flag;    sprintf(buf, "%s",cfg_file);    if ((fp = fopen(buf, "r+")) == NULL)         return -1;    tmpnam(tmp_file);    if ((fp1 = fopen(tmp_file, "a+")) == NULL)         return -4;    //找段名    flag = 0;    sprintf(buf, "[%s]", cfg_seg);    while (fgets(buffer, 256, fp) != NULL)    {        fprintf(fp1,"%s",buffer);        FilterRemark(buffer, item);        if (strstr(item, buf) != NULL)        {            flag = 1;            break;        }    }    if (flag != 1)    {        fclose(fp);        fclose(fp1);        return -2;    }    //找设置项,找到修改它    flag = 0;    sprintf(buf, "%s=", cfg_item);    while(fgets(buffer, 256, fp) != 0)    {        sprintf(tmp_buff,"%s",buffer);        FilterRemark(buffer, item);        FilterCR(item);             //匹配        if (strstr(item, buf) != NULL)        {	    sprintf(tmp_buff,"%s=",cfg_item);            strcat(tmp_buff,value);            fprintf(fp1,"%s\n",tmp_buff);            break;        }        else /*未找到此项*/        if (strchr(item, '[') != NULL && strchr(item, ']') != NULL)        {            fprintf(fp1,"%s\n",tmp_buff);            flag = 1;            break;        }	else            fprintf(fp1,"%s",tmp_buff);    }    //把未扫描过的文件内容写入文件    while(fgets(buffer, 256, fp) != 0)        fprintf(fp1,"%s",buffer);    fclose(fp1);    fclose(fp);    //临时文件易名为配置文件名    getcwd(buffer, 256);    strcat(buffer,"\\");    strcat(buffer,tmp_file);    if( flag==0 ){        //if( !MoveFileEx(buffer,cfg_file,MOVEFILE_REPLACE_EXISTING) )        if( !DeleteFile(cfg_file) || !MoveFile(buffer,cfg_file) )       	   flag=5;    }   return flag;}/*大写字母转为小写字母*/void U2L( char * buff){       unsigned int i;       for(i=0;i<strlen(buff);i++)            if( buff[i]>=65 && buff[i]<=90 )                 buff[i]=buff[i]+32;   //转为小写}

/******************************************
 功能:  从字符串中取数据数据项
 入参:  str 字符串
        fgf  分隔符 如'|'  
	item_no 项目顺序号
        val     取到的数据项
        val_len 存放数据项缓冲的最大长度
 返回:  0成功  !0失败
*******************************************/
int GetItemFromStr(char * str,char fgf,int item_no,char * val,int val_len )
{
        int len,fgf_no,i,j,count;

        len=strlen(str);
        if( len==0 ){
                val[0]='\0';
                return(0);
        }

        item_no=item_no-1;

        //定位分隔符
        for(i=0,count=0; count<item_no && i<len-1; ){
                for(;str[i]!=fgf&&i<len-1 ; i++);
                count++;
                if( i==len-1&& count<item_no ){
                        val[0]='0';
                        return(1);
                }
                i++;
        }

        //取数据项
        if( i==len-1 )
                val[0]='0';
        else{
                for(j=0; (str[i]!=fgf)&&(i<len)&&(j<val_len-1); i++,j++)
                        val[j]=str[i] ;
                val[j]='\0';
                if( (j==val_len-1) && (str[i]!=fgf) ) //数据项太长
                        return(2);
        }
	return( 0 );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -