jackhkyin 2023-08-15 10:28 采纳率: 71.4%
浏览 15
已结题

请教一个关于GetPrivateProfileString函数读取INI文件的问题

**最近有写一个运行再在Windows下的运维程序需求
运维程序exe通过读取ini文件匹配MAC地址来进行IP和计算机名的配置。我计划的实现思路逻辑如下:

目标Windows开机(IP及计算机名都是未配置状态) ---> 启动完成后运维程序exe运行 ---> 运维程序获取网卡MAC ---> 运维程序读取ini文件的所有MAC地址 ---> 将获取的网卡MAC地址与读取到的ini文件中的MAC进行匹配 ---> 匹配到条目则设置对应的IP和计算机名 --->完成退出

目前获取网卡MAC、配置IP、修改计算机名我都已经实现。问题在于MAC匹配上面。因为是INI文件,而非数据库表。假设MAC地址匹配了 aa-bb-cc-dd-ee-ff 如何让程序找到关联对应的IP和计算机名键值,即ip001键值和hostname001键值要跟mac001键值关联。是否还有其他的实现思路或INI文件设计方法,请有经验的师傅写个实例等等,谢谢~!!**

INI文件内容:

[config]
hostname001 = pc001
ip001 = 192.168.0.1
mac001 = aa-bb-cc-dd-ee-ff


hostname002 = pc002
ip002 = 192.168.0.2
mac002 = hh-ii-jj-kk-ll-mm


hostname003 = pc003
ip003 = 192.168.0.3
mac003 = nn-oo-pp-qq-rr-ss
  • 写回答

4条回答 默认 最新

  • churuxu 2023-08-15 12:23
    关注

    建议用csv格式保存配置,这样可以用excel编辑,也可以用文本编辑器编辑,又方便程序读取

    csv文件

    pc001,192.168.0.1,aa-bb-cc-dd-ee-ff
    pc002,192.168.0.2,hh-ii-jj-kk-ll-mm
    pc003,192.168.0.3,nn-oo-pp-qq-rr-ss
    

    读取代码

    #include <stdio.h>
    #include <string.h>
    
    int main(){
        char linebuf[512];
        char hostname[64];
        char ip[64];
        char mac[64];
        char* line;
        int ret;
        char* findmac = "hh-ii-jj-kk-ll-mm";
        FILE* f = fopen("a.csv", "rb");
        if(!f){
            printf("file open error\n");
            return -1;
        }
        while(1){
            line = fgets(linebuf, 512, f);
            if(!line)break;
            if(*line == 0)continue;
            ret = sscanf(line, "%[^,],%[^,],%s", hostname, ip, mac);
            if(ret != 3)continue;
            if(strcmp(mac, findmac) != 0)continue;        
            printf("found hostname=%s, ip=%s\n", hostname, ip);
            fclose(f);
            return 0;        
        }
        printf("not found\n");
        fclose(f);
        return 1;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月23日
  • 已采纳回答 8月15日
  • 赞助了问题酬金15元 8月15日
  • 修改了问题 8月15日
  • 展开全部