实现常用的配置文件/初始化文件读取的一个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;
            }
        }
    }
    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 "`[email protected]#$%^&*()_+{}-[]\|:"/.,<>"

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

时间: 2024-12-29 12:05:02

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

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

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

JavaScript文件处理:文件读取

在我的前一篇blog中,我介绍了在JavaScript中如何使用文件,具体重点放在如何获得File对象.只有当用户通过上传或者拖拽的方式上传了文件,这些对象才拥有文件的元数据.一旦你有了这些文件,下一步就是从这些文件中读取数据. FileReader 类型 FileReader类型有一个单一的工作,就是从一个文件中读取数据并存储在一个JavaScript变量中.它的API有意设计得与XMLHttpRequest相同,因为它们都是从一个外部资源(浏览器之外)加载数据.读操作是异步的,这样不会使浏览

linux(十一)之初始化文件

前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作. 要么现在懒惰,未来讨饭.要么现在努力,未来惬意. 一.初始化文件概述 1.1.概述 系统初始化文件是给系统做配置信息的,最重要的系统信息是环境变量的配置. 初始化文件分为系统级别和用户级别在shell为bash时: 1)系统级别的初始化文件: 针对所有用户都有效果的. /etc/profile 2)用户级别的初始化文件: 针对某一个用户有效果的. ~/.bashrc 1.2.设置环境变量 设置方式

Cocos2d-x操作:文件读取导致闪退

问题1:fopen 在vs下使用fopen进行文件处理,跑通了,但是移植到android下时就出现了一大推问题,首先需要理解的是在vs下开发资源是存放在执行文件的相同目录下的,而移植到android下时资源是存放在assets目录下的,之前尝试过使用以下的方法: char* fileName = "bg.png";  string filepath = [/font][/color]FileUtils::getInstance()[font=Arial]->fullPathFor

修改与文件类型关联的默认程序

13/12/27 安装了Planner项目管理软件后,发现.planner文件的默认打开程序为gedit.想要将其修改过来,在open with的程序列表里也没有planner这一项,而且也无法人工指定命令行,似乎这一功能被Nautilus关掉了.通过网上搜索,Gnome系统中文件类型的描述,即mimetype,存放于/usr/share/mime与~/.local/share/mime目录下.而用于描述应用程序所能打开的文件类型则主要放在其中的application子目录中.可以看到,其中已经

springmvc加载xml文件读取本地properties配置文件

org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.由这个类别,您可以将一些组态设定,移出至.properties档案中,如此的安排可以让XML定义档负责系统相关设定,而.properties档可 以作为客户根据需求,自定义一些相关的参数.实际上,PropertyPlaceholderConfigurer起的作用就是将占位符指向的数据库配置 信息放在bean中定义的工具. (1)使用以下方式读取单个本地文件

java初始化数据库读取sql配置文件建表

在src/main/resources下sql文件夹建立一个init.sql文件,放入建表语句: CREATE TABLE {DB}.`AGENT_STATUS` ( `DEVICE_NUM` varchar(100) NOT NULL, `START_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `STATUS` int(11) NOT NULL, `DURATION` int(1

OC中文件读取类(NSFileHandle)介绍和常用使用方法

NSFileHandle NSFileManager类主要对于文件的操作(删除,修改,移动,赋值等等) //判断是否有 tagetPath 文件路径,没有就创建 NSFileManager *fileManage = [NSFileManager defaultManager]; BOOL success = [fileManage createFileAtPath:tagetPath contents:nil attributes:nil]; if (success) { NSLog(@"cr

.Net常用技巧_C#写入和读取txt文件

using System.Text.RegularExpressions; //脱机数据导出 private void writeTxt(string str) { string strFileName = @"\Program Files\firexungengcard\FireXungeng.txt"; FileInfo file = new FileInfo(strFileName); StreamWriter sWriter; if (file.Exists) { sWrite