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

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

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

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


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

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

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;
}
}
}
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 "`[email protected]#$%^&*()_+{}-[]\|:"/.,<>"

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

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

时间: 2024-10-08 11:13:05

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

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

在编程中,我们经常会遇到一些配置文件或初始化文件.这些文件通常后缀名为.ini或者.conf,可以直接用记事本打开.里面会存储一些程序参数,在程序中直接读取使用.例如,计算机与服务器通信,服务器的ip地址,段口号可以存储于ini文件中.这样如果我想换另外一台服务器时,直接将ini文件中的ip地址改变即可,程序源代码不需要做任何修改. 本文将分享一段常用代码,用于读取配置文件中的信息.本文中的代码为C语言编写,在ubuntu 12.04 linux系统中调试没有问题.具体操作如下: 1. 首先用记

用scala实现一个基于TCP Socket的快速文件传输程序

这是用scala实现的一个简单的文件传输程序. 服务端 package jpush import java.io.{DataInputStream, File, FileOutputStream} import java.net.ServerSocket import scala.collection.JavaConversions._ /** * Created by dingb on 2016/6/3. */ object Server extends App { def port = 88

HOOK API (一)——HOOK基础+一个鼠标钩子实例

HOOK API (一)——HOOK基础+一个鼠标钩子实例 0x00 起因 最近在做毕业设计,有一个功能是需要实现对剪切板的监控和进程的防终止保护.原本想从内核层实现,但没有头绪.最后决定从调用层入手,即采用HOOK API的技术来挂钩相应的API,从而实现预期的功能.在这样的需求下,就开始学习了HOOK API. 0x01什么是HOOK API HOOK(钩子,挂钩)是一种实现Windows平台下类似于中断的机制[24].HOOK机制允许应用程序拦截并处理Windows消息或指定事件,当指定的

Yaf零基础学习总结4-Yaf的配置文件

在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置项都以ap开头. Yaf的核心必不可少的配置项只有一个(其实, 这个也可以有默认参数, 但是作者觉得完全没有配置, 显得太寒酸了). Yaf通过在不同的环境中, 选取不同的配置节, 再结合配置可继承, 来实现一套配置适应多种环境(线上,测试,开发). yaf一个必不可少的配置项,也就是配置应用项目的

c/c++unix/linux基础学习笔记-常用命令和vi的使用

linux 基本命令的使用-命令在ubuntu下面执行,有些命令通用其他linux,有些不通用. 多条命令间用;号隔开,回车后可以一起执行. clear-前屏,pwd显示当前目录,cd跳转目录. sudo [命令]  -ubuntu 下以管理员身份运行命令. 一般情况下,运行当前目录下的程序,要用 ./文件名 执行. 查看当前shell名称:ps 进入另外一个shell,直接输入shell名称:ksh/tcsh/sh/bash,退出一个shell用:exit. 切换shell命令,如:exec

Linux 系统基础优化和常用命令

目录 Linux 系统基础优化和常用命令 软连接 tar解压命令 gzip命令 netstart命令 ps命令 kill命令 killall命令 SELinux功能 iptables防火墙 Linux中文显示设置(防止中文乱码) df 命令 tree命令 设置主机名 DNS 查看Linux的dns, 唯一配置文件 本地强制dns解析文件 /etc/hosts nslookup命令 计划任务crond服务 软件包管理 windows程序 macos程序 RPM软件包管理器 实例 rpm安装软件 r

Linux基础系统优化及常用命令

# Linux基础系统优化及常用命令 [TOC] ## Linux基础系统优化 Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. - ifconfig 查询.设置网卡和ip等参数- ifup,ifdown 脚本命令,更简单的方式启动关闭网络- ip 符合指令,直接修改上述功能 ```bash在我们刚装好linux的时候,需要用xshell进行远程连接,那就得获取ip地址,有时候网卡默认是没启动的,Linux也就拿不到ip地址,因

mybatis 源码学习(一)配置文件初始化

mybatis是项目中常用到的持久层框架,今天我们学习下mybatis,随便找一个例子可以看到通过读取配置文件建立SqlSessionFactory,然后在build拿到关键的sqlsession,这是我从网上随便找了下例子, 关键的方法在于new SqlSessionFactoryBuilder().build(reader); 可以看到parser.parse() 返回的结果是Configuration ,而mybatis所有的配置文件初始化在这个类里面,这个是很关键的类. 这里可以看到读取

一,数据库基础,MySQL安装,配置文件,语法

今日总结: 一,数据库基础 ***** 二:mysql 的下载安装 ***** 三:修改密码 四 配置文件 *** 五:数据库基础语法 ****** 一,数据库基础: 1,数据库基础概念 1,之前储存到文件中 ,数据格式也是千差万别的 2,软件开发目录规范,规定了数据的存放位置,数据都是保存在本地的, 3,将保存数据的,存储到一个公共的地方 MySQL就是一个基于C/S 架构的应用软件,也是一个基于网络通信的socket套接字应用软件 服务端:socket 套接字通信 收发消息 SQL语句(是一