博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现经常使用的配置文件/初始化文件读取的一个C程序
阅读量:5977 次
发布时间:2019-06-20

本文共 2659 字,大约阅读时间需要 8 分钟。

      在编程中,我们常常会遇到一些配置文件或初始化文件。

这些文件通常后缀名为.ini或者.conf。能够直接用记事本打开。里面会存储一些程序參数,在程序中直接读取使用。比如,计算机与server通信。server的ip地址,段口号能够存储于ini文件里。这样假设我想换另外一台server时。直接将ini文件里的ip地址改变就可以。程序源码不须要做不论什么改动。

本文将分享一段经常使用代码,用于读取配置文件里的信息。

本文中的代码为C语言编写,在ubuntu 12.04 linux系统中调试没有问题。详细操作例如以下:

1. 首先用记事本创建一个config.ini文件(文件名称能够随便取)。并如果该文件是我们要读取的配置文件。文件内容例如以下:

information1: 1234567890information2: this is test informationinformation3: `~!@#$%^&*()_+{}-[]\|:"/.,<>

如果我们读取的初始化文件每一行都是  <属性名称>: <属性值>  的格式。

在上述样例中,文件共同拥有三行,分别代表三个属性的信息。

2. 然后就是我们的代码文件了,例如以下(将下面代码存在ReadFile.cpp中):

#include 
#include
const size_t MAX_LEN = 128;typedef struct{ char firstline[MAX_LEN]; char secondline[MAX_LEN]; char thirdline[MAX_LEN];} Data;void readfile(Data *d){ const char *FileName = "config.ini"; char LineBuf[MAX_LEN]={
0}; FILE *configFile = fopen(FileName, "r"); memset(d,0,sizeof(Data)); while(NULL != fgets(LineBuf, sizeof(LineBuf), configFile)) { size_t bufLen = strlen(LineBuf); if('\r' == LineBuf[bufLen-1] || '\n' == LineBuf[bufLen-1]) { LineBuf[bufLen-1] = '\0'; } char *pos = strchr(LineBuf,':'); if(NULL != pos) { *pos = '\0'; pos++; if(0 == strcmp(LineBuf, "information1")) { for(; *pos == ' '; pos++){} strcpy(d->firstline, pos); } else if(0 == strcmp(LineBuf, "information2")) { for(; *pos == ' '; pos++){} strcpy(d->secondline, pos); } else if(0 == strcmp(LineBuf, "information3")) { for(; *pos == ' '; pos++){} strcpy(d->thirdline, pos); } else { printf("Failed to read information from the file."); break; } } } fclose(configFile); configFile = NULL; return;}int main(int argc, char *argv[]){ Data *d = new Data; readfile(d); printf("d->firstline is \"%s\"\n", d->firstline); printf("d->secondline is \"%s\"\n", d->secondline); printf("d->thirdline is \"%s\"\n", d->thirdline); delete d; return 0;}

当中,struct Data是用于存储要读取的信息的结构体,readfile函数也就是实现我们读取功能的函数,当中的值均存在struct Data中。最后我们写了一个简单的main函数用来測试结果。须要注意的是,在struct Data中,我们设置了char数组长度,最大不超过128。因此假设要读取的信息超过128字节可能会出错。假设有须要读取更长的话能够将MAX_LEN设置为一个更大的值。

3. 最后就是我们的调试结果了,在命令行中执行例如以下命令

$ g++ -o test.out ReadFile.cpp$ ./test.out

然后就是执行结果:

d->firstline is "1234567890"d->secondline is "this is test information"d->thirdline is "`!@#$%^&*()_+{}-[]\|:"/.,<>"

这样的读取文件的代码应该很经常使用。要掌握。

转载地址:http://xbsox.baihongyu.com/

你可能感兴趣的文章
DNS解析相关实验:7台主机的恩怨情仇
查看>>
Goldengate双向复制配置
查看>>
Oracle官方内部MAA教程
查看>>
DNS相关配置
查看>>
Nginx-location配置
查看>>
扫描线
查看>>
设计模式--模板方法(Template Method)
查看>>
引入CSS的方式有哪些?link和@import的有何区别应如何选择【转载】
查看>>
MariaDB 和 MySQL 性能测试比较
查看>>
Restful Web Service初识
查看>>
This用法和闭包
查看>>
JSP页面获取系统时间
查看>>
L-1-19 Linux之RAID&分区&文件系统命令
查看>>
stat查找权限以数字形式显示
查看>>
Java面向对象学习笔记(二)
查看>>
源码编译安装httpd2.4.9
查看>>
linux系统优化
查看>>
在使用 Windows Update 检查更新时,系统没有提供下载 Windows 7 SP1 的选项
查看>>
在Struts + Spring + Hibernate的组合框架模式中,三者各自的特点都是什么
查看>>
Windows 2012 R2 DataCenter服务器DNS无法打开AD, DNS错误代码4000 4007 4013
查看>>