在编程中,我们经常会遇到一些配置文件或初始化文件。这些文件通常后缀名为.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. JAVA记录-IntelliJ Idea 2017 免费激活方法(转载)

    1. 到网站 http://idea.lanyus.com/ 获取注册码. 2.填入下面的license server: http://intellij.mandroid.cn/ http://ide ...

  2. telegraf、influxDB、Grafana的安装与基本使用

    目的理解influxDB的数据收集原理和方法为使用grafana分析数据及展示结作好准备介绍[收集数据] Telegraf 是一个用 Go 编写的代理程序,可收集系统和服务的统计数据,并写入到 Inf ...

  3. 流媒体技术学习笔记之(十)HLS协议直播延时优化(35s到10S)

    1.首先要了解HLS延时的机制,也就是为什么会延时,延时主要发生在什么地方. HTTP Live Streaming 并不是一个真正实时的流媒体系统,这是因为对应于媒体分段的大小和持续时间有一定潜在的 ...

  4. MySQL记录异常实体类设计

    public class LogInfo { /// <summary> /// 应用名 /// </summary> public string AppName { get; ...

  5. c++ 函数指针简单实例

    一开始看函数指针的时候我是很懵的,因为不知道它有什么用,之后慢慢就发现了自己的愚昧无知. 假设我们想实现一个数据结构,比如二叉搜索树,堆.又或者是一个快排,归并排序. 我们一般是直接在两个数要比较的时 ...

  6. 【CTF WEB】反序列化

    反序列化 漏洞代码 <?php error_reporting(0); if(empty($_GET['code'])) die(show_source(__FILE__)); class ex ...

  7. vim助手

    移动光标 hjkl 2w 向前移动两个单词 3e 向前移动到第 3 个单词的末尾 0 移动到行首 $ 当前行的末尾 gg 文件第一行 G 文件最后一行 行号+G 指定行 <ctrl>+o ...

  8. 查看nginx | apache | php | tengine | tomcat版本的信息以及如何隐藏版本信息【转】

    转自: 查看nginx | apache | php | tengine | tomcat版本的信息以及如何隐藏版本信息 - 追马 - 51CTO技术博客http://lovelace.blog.51 ...

  9. idea如何编译maven项目

    这里我们介绍两种方式,如何调试出窗口 点击菜单栏View->Tool  Windows->Maven projects 点击菜单栏Help->Find Action(Ctrl+Shi ...

  10. java实战

    1.http://learning.happymmall.com/ http://www.happymmall.com/index.html  前台官网 http://test.happymmall. ...