C语言读写配置文件的方法

本文实例讲述了C语言读写配置文件的方法。分享给大家供大家参考。具体如下:

CException.h如下:

/************************************************************************/
/*       make0000@msn.com   */
/************************************************************************/
/************************************************************************/
#include "stdio.h"
#include "conio.h"
#include "signal.h"
#include "setjmp.h"
#include "assert.h"
#ifdef __cplusplus
  #include "iostream"
  #include "exception"
  extern "C"{
    #define dllexport __declspec(dllexport)
    jmp_buf Jmp_Buf;
    int E;
    #define Exception 0x00000
    #define e Exception
    #define try if(!(E=setjmp(Jmp_Buf)))
    #define last_error() E
    #define catch(val) else
    #define throw(val) longjmp(Jmp_Buf,val)
    #define check(expersion) assert(expersion)
    #define GetError() errno
    dllexport void sig_usr(int);
    dllexport char* getTime();
  }
#else
  #define dllexport __declspec(dllexport)
  jmp_buf Jmp_Buf;
  int E;
  #define Exception 0x00000
  #define e Exception
  #define try if(!(E=setjmp(Jmp_Buf)))
  #define last_error() E
  #define catch(val) else
  #define throw(val) longjmp(Jmp_Buf,val)
  #define check(expersion) assert(expersion)
  #define GetError() errno
  dllexport void sig_usr(int);
  dllexport char* getTime();
#endif

File.h如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define SIZE 128
#include "CException.h"
#define export __declspec(dllexport)
//读取配置文件.
int read_file(char* filename,char* key,char* value);
//写配置文件.
int write_file(char* filename,char* key,char* value);
//释放文件.
int release();
//写入节.
int write_section(char* filename,char* section);
int read_section(char* filename);
int getAuthor(char* value);
void getVersion(char* value);

File.c如下:

#include "File.h"
#include <string.h>
int read_file(char* filename,char* key,char* value)
{
 int flag=0;
 char buffer[SIZE];
 FILE *file=fopen(filename,"r");
 try
 {
  if(file==NULL)
  {
  flag=1;
  throw(flag);
  }
  else
  {
  while(fgets(buffer,SIZE,file)!=NULL)
  {
   int i=0,j=0,len=strlen(key);
   while(buffer[i]!='\0')
   {
    if(buffer[i]=='$'&&buffer[i+len+1]=='=')
    {
    j=i+len+2;
     while(buffer[j]!='\0'&&buffer[j]!=';')
     {
     int h=0;
     if(buffer[i+1]==key[i])
     {
      //printf("%c",buffer[j]);
      value[j-i-len-2]=buffer[j];
     }
     j++;
     }
    break;
    }
    else if(buffer[i]=='/'&&buffer[i+1]=='/'||buffer[i]==';')
    {
    break;
    //comment
    }
   i++;
   }
  }
  }
 }
 catch(Exception)
 {
  flag=2;
  fclose(file);
  printf("can't open file %s",filename);
  exit(1);
 }
 fflush(file);
 fclose(file);
 return flag;
}
int write_file(char* filename,char* key,char* value)
{
 int flag=0;
 FILE* file;
 file=fopen(filename,"a");
 try
 {
 if(file==NULL)
 {
 flag=1;
 throw(flag);
 }
 fprintf(file,"$%s=%s\n",key,value);
 }
 catch(Exception)
 {
 printf("Can't write file %s",filename);
 exit(1);
 }
 fflush(file);
 fclose(file);
 return flag;
}
int write_section(char* filename,char* section)
{
 int flag=0;
 FILE* file=NULL;
 try
 {
 file=fopen(filename,"a");
 if(file!=NULL)
 {
  fprintf(file,"[%s]\n",section);
 }
 else
 {
  int flag=1;
  throw(flag);
 }
 }
 catch(Exception)
 {
 printf("can't open file %s",filename);
 exit(0);
 }
 fflush(file);
 fclose(file);
 return flag;
}
int release()
{
 int flag=1;
 return flag;
}
int read_section(char* filename)
{
 return 0;
}
int getAuthor(char* value)
{
 char author[128]="武汉软件工程职业学院计算机应用系";
 int i=0;
 for(i=0;i<strlen(author);i++)
 {
 value[i]=author[i];
 }
 return 0;
}
void getVersion(char* value)
{
 char version[128]="2009//05//01";
 int i=0;
 for(i=0;i<strlen(version);i++)
 {
 value[i]=version[i];
 }
}
/**************************************************************************
void main()
{
 char* str=NULL;
 char author[120];
 char buffer[128];
 char buffer1[128];
 char buffer2[128];
 read_file("F:\\exercise\\C++!C\\sys.ini","password",buffer);
 read_file("F:\\exercise\\C++!C\\sys.ini","username",buffer1);
 read_file("F:\\exercise\\C++!C\\sys.ini","driver",buffer2);
 printf("password=%s\n",buffer);
 printf("\n");
 printf("username=%s\n",buffer1);
 printf("\n");
 printf("driver=%s\n",buffer2);
 getAuthor(author);
 printf("\n");
 printf("author=%s",author);
 release();
}

希望本文所述对大家的C语言程序设计有所帮助。

(0)

相关推荐

  • C语言中建立和删除文件连接的相关函数讲解

    C语言link()函数:建立文件连接 头文件: #include <unistd.h> 定义函数: int link (const char * oldpath, const char * newpath); 函数说明:link()以参数newpath 指定的名称来建立一个新的连接(硬连接)到参数oldpath 所指定的已存在文件. 如果参数newpath 指定的名称为一已存在的文件则不会建立连接. 返回值:成功则返回0, 失败返回-1, 错误原因存于errno. 附加说明:link()所建立

  • Windows系统下使用C语言编写单线程的文件备份程序

    写在最前方 源路径:即 From-Path,你准备要备份的资料 目的路径: 即 To-Path,你准备要存储备份的资料的地方 稍微回想一下,上一次写的代码,本次的任务是遍历目录及其子目录,那么这回要干的就是将上次遍历过的数据,挪一下窝,到我们想要他们去的位置. 这涉及到两个操作,遍历 和 拷贝,前一个动作我们在上一回已经实现了,只需做小小的改动,就能够使用.后一个动作也是需要靠 Windows API来完成,至于哪些,稍后再提. 现在先让我们完成一个魔法,3, 2, 1!: do{ puts("

  • C语言新建临时文件和临时文件名的方法

    C语言mkstemp()函数:建立临时文件 头文件: #include <stdlib.h> 定义函数: int mkstemp(char * template); 函数说明:mkstemp()用来建立唯一的临时文件. 参数template 所指的文件名称字符串中最后六个字符必须是XXXXXX. Mkstemp()会以可读写模式和0600 权限来打开该文件, 如果该文件不存在则会建立该文件. 打开该文件后其文件描述词会返回. 文件顺利打开后返回可读写的文件描述词. 若果文件打开失败则返回NUL

  • 使用C语言操作文件的基本函数整理

    C语言creat()函数:创建文件函数 头文件: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 定义函数: int creat(const char * pathname, mode_tmode); 函数说明: 1.参数 pathname 指向欲建立的文件路径字符串. 2.Creat()相当于使用下列的调用方式调用open()     open(const char * pathname,

  • C语言对组文件处理的相关函数小结

    C语言getgrent()函数:从组文件中取得账号的数据 头文件: #include <grp.h> #include <sys/types.h> 定义函数: struct group * getgrent(void); 函数说明:getgrent()用来从组文件(/etc/group)中读取一项组数据, 该数据以group 结构返回. 第一次调用时会取得第一项组数据, 之后每调用一次就会返回下一项数据, 直到已无任何数据时返回NULL. struct group { char *

  • C语言读取文件流的相关函数用法简介

    C语言fread()函数:读文件函数(从文件流读取数据) 头文件: #include <stdio.h> 定义函数: size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream); 函数说明:fread()用来从文件流中读取数据. 参数stream 为已打开的文件指针, 参数ptr 指向欲存放读取进来的数据空间, 读取的字符数以参数size*nmemb 来决定. Fread()会返回实际读取到的nmemb 数目, 如果此值

  • C语言中对文件最基本的读取和写入函数

    C语言read()函数:读文件函数(由已打开的文件读取数据) 头文件: #include <unistd.h> 定义函数: ssize_t read(int fd, void * buf, size_t count); 函数说明:read()会把参数fd 所指的文件传送count 个字节到buf 指针所指的内存中. 若参数count 为0, 则read()不会有作用并返回0. 返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动.

  • C语言中用于修改文件的存取时间的函数使用

    C语言utime()函数:修改文件的存取时间和更改时间 头文件: #include <sys/types.h> #include <utime.h> 定义函数: int utime(const char * filename, struct utimbuf * buf); 函数说明:utime()用来修改参数filename 文件所属的inode 存取时间.结构utimbuf 定义如下: struct utimbuf { time_t actime; time_t modtime;

  • C语言中获取文件状态的相关函数小结

    C语言stat()函数:获取文件状态 头文件: #include <sys/stat.h> #include <unistd.h> 定义函数: int stat(const char * file_name, struct stat *buf); 函数说明:stat()用来将参数file_name 所指的文件状态, 复制到参数buf 所指的结构中. 下面是struct stat 内各参数的说明: struct stat { dev_t st_dev; //device 文件的设备编

  • C语言中的各种文件读写方法小结

    前言     找工作的时候,曾经用C语言练习过一段时间的算法题目,也在几个还算出名的OJ平台有过还算靠谱的排名.之前以为C语言只限于练习一下算法,但是工作中的一个问题解决让我意识到C语言的用处还是非常广泛的.下面介绍一下,如果用C语言来操作文件保存一个字符串,和读取一个字符串.算法中往往都是printf来打印出结果,但是真实工作中往往通过文件来进行一些持久化的存储工作. C-File I/O     文件的I/O操作是每一门语言的重点,因此这里我先来介绍一下如何用C语言去进行文件的I/O操作.

随机推荐