在编程中,我们经常会遇到一些配置文件或初始化文件。这些文件通常后缀名为.ini或者.conf,可以直接用记事本打开。里面会存储一些程序参数,在程序中直接读取使用。例如,计算机与服务器通信,服务器的ip地址,段口号可以存储于ini文件中。这样如果我想换另外一台服务器时,直接将ini文件中的ip地址改变即可,程序源代码不需要做任何修改。

本文将分享一段常用代码,用于读取配置文件中的信息。本文中的代码为C语言编写,在ubuntu 12.04 linux系统中调试没有问题。具体操作如下:

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

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

假设我们读取的初始化文件每一行都是  <属性名称>: <属性值>  的格式。在上述例子中,文件共有三行,分别代表三个属性的信息。

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

#include <string.h>
#include <stdio.h> 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 "`!@#$%^&*()_+{}-[]\|:"/.,<>"

这种读取文件的代码应该非常常用,要掌握。

实现常用的配置文件/初始化文件读取的一个C程序的更多相关文章

  1. 实现经常使用的配置文件/初始化文件读取的一个C程序

    在编程中,我们常常会遇到一些配置文件或初始化文件. 这些文件通常后缀名为.ini或者.conf.能够直接用记事本打开.里面会存储一些程序參数,在程序中直接读取使用.比如,计算机与server通信.se ...

  2. [C++基础]一个比较常用的配置文件/初始化文件读取程序

    在编程中,我们经常会遇到一些配置文件或初始化文件.这些文件通常后缀名为.ini或者.conf,可以直接用记事本打开.里面会存储一些程序参数,在程序中直接读取使用.例如,计算机与服务器通信,服务器的ip ...

  3. IoC COntainer Create Javabeans 可以通过读取beans.xml 文件来创建一个应用程序上下文对象 依赖反转

    Spring初学快速入门 - Spring教程™ https://www.yiibai.com/spring/spring-tutorial-for-beginners.html# pom <? ...

  4. linux常用终端指令+如何用vim写一个c程序并运行

    在装好ubuntu之后今天学习了一些linux的一些基础知识: windows里面打开命令窗口是win+r,在linux系统里面,ctrl+alt+t打开终端,今天的一些指令都是围绕终端来说的 首先s ...

  5. GDAL中RasterIO函数(把文件读取为一个一维数组)和ReadBlock函数(读取栅格数据块)

    CPLErr GDALRasterBand::RasterIO ( GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize, int nYSize, ...

  6. HTML5 文件读取

    一.定义 input的file类型会渲染为一个按钮和一段文字.点击按钮可打开文件选择窗口,文字表示对文件的描述(大部分情况下为文件名):file类型的input会有files属性,保存着文件的相关信息 ...

  7. node基础:文件系统-文件读取

    node的文件读取主要分为同步读取.异步读取,常用API有fs.readFile.fs.readFileSync.还有诸如更底层的fs.read,以及数据流(stream),后面再总结下咯~ 直接上简 ...

  8. linux(十)之初始化文件

    前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作. 要么现在懒惰,未来讨饭.要么现在努力,未来惬意. 一.初始化文件概述 1.1.概述 系统初始化文件是 ...

  9. Python——文件读取

    我们经常需要从文件中读取数据,因此学会文件的读取很重要,下面来介绍一下文件的读取工作:     1.读取整个文件     pi_digits.text 3.1415926535 8979323846 ...

随机推荐

  1. redis支持的数据结构

    redis数据库里面的每个键值对都是由对象组成的. 其中数据库键的值总是字符串对象. 数据库的值则可以是字符串对象(String),列表对象(list),哈希对象(Hash),集合对象(Set),有序 ...

  2. IntelliJ IDEA 破解 - pycharm

    MAC激活方法 下载破解文件 下载地址: https://files.cnblogs.com/files/resn/JetbrainsCrack-2.7-release-str.jar.zip 或者去 ...

  3. 雨林木风ghostwin7纯净版系统下载

    雨林木风ghostwin7纯净版系统下载 关于easyuidatagrid的问题,跪求老司机带带我..... 关于cst_modesys/stat.h一个问题求解答谢谢 [程序]STM32使用SPI接 ...

  4. Tornado实现多线程、多进程HTTP服务

    背景 线上有一个相关百科的服务,返回一个query中提及的百科词条.该服务是用python实现的,以前通过thrift接口访问,现要将其改为通过HTTP访问.之前没有搭建HTTPServer的经验,因 ...

  5. 洛谷 P1056 排座椅 桶排序

    桶排序大法好! 每次一看到这种范围小的题,本萌新就想用桶排. 因为题目中的m,n都小于1000,我们就可以定义两个1000的数组,表示每一行或每一列可以隔开几对讲话的童鞋. 然后再定义两个1000的数 ...

  6. js星星评分插件

    下载:https://files.cnblogs.com/files/wordblog/%E6%98%9F%E6%98%9F%E6%8F%92%E4%BB%B6.rar

  7. 阿里云配置 https 证书

    阿里云配置中心 https://yundun.console.aliyun.com/?p=cas#/cas/home 证书审核通过后复制到 ecs scp /path/filename usernam ...

  8. 各浏览器 position: fixed 造成的bug 通用解决办法,Safari, iOS

    将原来使用 position: fixed  的元素外层包裹一个 div.fixedWrapper .fixedWrapper { width: 100%; overflow: hidden; pos ...

  9. JS种this的四种用法

    记住以下四点: 1.没调用对象就指向全局对象 2.有对象就指向调用对象 3.用new构造就指向新对象 4.通过 apply 或 call 或 bind 来改变 this 的所指. 1.测试一:没调用对 ...

  10. LINUX下 USB转串口 【转】

    转自:http://blog.163.com/smilexiao_11015461/blog/static/2122052182012102410399459/ 1.将设备u口插入pc2.输入#lsm ...