实现经常使用的配置文件/初始化文件读取的一个C程序
在编程中,我们常常会遇到一些配置文件或初始化文件。
这些文件通常后缀名为.ini或者.conf。能够直接用记事本打开。里面会存储一些程序參数,在程序中直接读取使用。比如,计算机与server通信。server的ip地址,段口号能够存储于ini文件里。这样假设我想换另外一台server时。直接将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程序的更多相关文章
- 实现常用的配置文件/初始化文件读取的一个C程序
在编程中,我们经常会遇到一些配置文件或初始化文件.这些文件通常后缀名为.ini或者.conf,可以直接用记事本打开.里面会存储一些程序参数,在程序中直接读取使用.例如,计算机与服务器通信,服务器的ip ...
- [C++基础]一个比较常用的配置文件/初始化文件读取程序
在编程中,我们经常会遇到一些配置文件或初始化文件.这些文件通常后缀名为.ini或者.conf,可以直接用记事本打开.里面会存储一些程序参数,在程序中直接读取使用.例如,计算机与服务器通信,服务器的ip ...
- IoC COntainer Create Javabeans 可以通过读取beans.xml 文件来创建一个应用程序上下文对象 依赖反转
Spring初学快速入门 - Spring教程™ https://www.yiibai.com/spring/spring-tutorial-for-beginners.html# pom <? ...
- GDAL中RasterIO函数(把文件读取为一个一维数组)和ReadBlock函数(读取栅格数据块)
CPLErr GDALRasterBand::RasterIO ( GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize, int nYSize, ...
- linux(十)之初始化文件
前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作. 要么现在懒惰,未来讨饭.要么现在努力,未来惬意. 一.初始化文件概述 1.1.概述 系统初始化文件是 ...
- Python——文件读取
我们经常需要从文件中读取数据,因此学会文件的读取很重要,下面来介绍一下文件的读取工作: 1.读取整个文件 pi_digits.text 3.1415926535 8979323846 ...
- node基础:文件系统-文件读取
node的文件读取主要分为同步读取.异步读取,常用API有fs.readFile.fs.readFileSync.还有诸如更底层的fs.read,以及数据流(stream),后面再总结下咯~ 直接上简 ...
- linux(十一)之初始化文件
前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作. 要么现在懒惰,未来讨饭.要么现在努力,未来惬意. 一.初始化文件概述 1.1.概述 系统初始化文件是 ...
- 在JavaScript中进行文件处理,第二部分:文件读取
译注:原文是<JavaScript高级程序设计>的作者Nicholas Zakas写的,本翻译纯属为自己学习而做,仅供参考.原文链接:这里 在我的前一篇blog中,我介绍了在JavaScr ...
随机推荐
- Andorid-如何为你的Android应用缩放图片
很难为你的应用程序得到正确的图像缩放吗?是你的图片过大,造成内存问题?还是图片不正确缩放造成不良用户体验的结果?为了寻求一个好的解决方案,我们咨询了Andreas Agvard(索尼爱立信软件部门), ...
- [Papers]NSE, $\pi$, Lorentz space [Suzuki, JMFM, 2012]
$$\bex \sen{\pi}_{L^{s,\infty}(0,T;L^{q,\infty}(\bbR^3))} \leq \ve_*, \eex$$ with $$\bex \frac{2}{s} ...
- php-PHP试题
ylbtech-doc:php-PHP试题 PHP试题 1.A,PHP试题返回顶部 1.{PHP题目}标识符是变量的名称.PHP中的标识符用“$+变量名”来表示.标识符在PHP中遵循下列选项中的那些规 ...
- IOS init initWith 等相关集中
1.initWithCoder 当一个view从nib初始化的时候,会调用这个函数. 用keyedArchiver序列化一个类的实力,后面用keyedUnArchiver拿回来的时候会调用到 ...
- wuzhicms水印的设置
- Java基础题
问题: 1.请对比一下重载和重写的区别. 2.请对比一下接口和抽象类的异同. 3.写出一个单例模式,并说明其优点. 4.用过String.StringBuffer吗,说出他们的异同. 5.什么是值传递 ...
- Codeforces 377
简单说一下. A 搜索出任意一个剩余细胞个数的联通块.剩下的填X. B 二分加贪心加数据结构. /* * Problem: * Author: Shun Yao */ #include <str ...
- Centos6.4 coll linux 10.2
由于oracle10g太老了,只怪他娘Oracle生它生的太早了,差点就没赶上新时代(这家伙内心可也有些挺自豪的东东的,人家很有可能跟着它的主要干爹工程师为雅典奥运贡献了门票哩,生逢盛会啊!),较Ce ...
- 转】Maven学习总结(二)——Maven项目构建过程练习
原博文出自于:http://www.cnblogs.com/xdp-gacl/p/4051690.html 感谢! 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven ...
- Spark生态之Spark Core