`
mengdejun
  • 浏览: 410400 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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();
}
****************************************************************************/

sys.ini

[mysql]
$username=root
$password=123456
$driver=com.mysql.jdbc.Driver
$url=jdbc:mysql://localhost:3306/mysql

动态链接库测试:

#include <windows.h>
typedef (* write)(char* filename,char* key,char* value);
typedef (* writes)(char* filename,char* value);
typedef (* read)(char* filename,char* key,char* value);
HINSTANCE hInstance;
write write_file;
writes write_section;
read read_file;
char buffer[128];
char buffer1[128];
void main()
{
hInstance=LoadLibrary("File.dll");
if(hInstance!=NULL)
{

write_file=(write)GetProcAddress(hInstance,"write_file");
write_section=(writes)GetProcAddress(hInstance,"write_section");
read_file=(read)GetProcAddress(hInstance,"read_file");

write_section("config.ini","mysql");
write_file("config.ini","username","root");
write_file("config.ini","password","admin");
write_file("config.ini","driverClassName","com.mysql.jdbc.Driver");
write_file("config.ini","url","jdbc:mysql://localhost:3306/user");

read_file("config.ini","username",buffer);
printf("username=%s",buffer);

read_file("config.ini","password",buffer1);
printf("password=%s",buffer1);
}
else
{
printf("can't load dynamic file File.dll");
}
FreeLibrary(hInstance);
}

 

分享到:
评论
1 楼 wida 2011-03-04  
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; 
        } 


这一块逻辑有问题, 有 passrrrr 试试吧

相关推荐

    C语言实现读写配置文件

    用纯C语言实现配置文件的读写函数,可代替WritePrivateProfileString和GetPrivateProfileString函数. 

    纯C语言读写ini配置文件

    标题 "纯C语言读写ini配置文件" 描述的是一个使用C语言编写的程序,能够处理常见的ini配置文件。ini文件是一种简单的文本格式,通常用于存储应用程序的设置和配置信息。这种格式易于阅读和编辑,适合小型应用或系统...

    C语言读写配置文件代码PDF

    MFC读写ini配置文件 1.新建头文件如:iniFunc.h,在编辑区域粘贴以下内容: // iniFunc.h: interface for the Cini class. #if !defined(AFX_OPINI_H_CE3F8B7B_1ACA_46CC_A91C_F8E23FA9B063_INCLUDED #define AFX_...

    Linux C语言的配置文件操作库

    它允许开发者以结构化的方式读写配置文件,提供了易于使用的API接口,包括配置文件的读取、写入、遍历以及键值对的修改等功能。 3. **inih库**:inih是一个小型、简单的C语言库,专门处理INI格式的配置文件。它的...

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

    在C语言中,读写配置文件是常见的...总结来说,C语言读写配置文件的方法主要包括解析INI格式的文本,查找和修改键值对,以及处理文件I/O操作。通过定义适当的函数和宏,可以构建一个高效且易于使用的配置文件处理模块。

    linux配置文件读写好用的类

    为了简化这个过程,开发者通常会创建一个自定义的库或者封装一个类,提供更高级别的接口来读写配置文件。这样的类可能包含解析不同格式配置文件的方法,如`parseINI()`, `parseXML()`, `parseJSON()`等,并且提供...

    用c语言实现配置文件读写

    用c语言实现配置文件读写,完整的函数,适当的注释,值得的参考!

    C语言实现的读写配置文件函数,与Windows API函数功能一样

    本篇将详细介绍如何使用C语言来实现一个类似Windows API功能的配置文件读写函数,以及这些函数的工作原理和实现细节。 配置文件(如.ini文件)常用于存储应用程序的设置和参数,方便程序在启动时读取,运行时修改或...

    c语言读写ini文件

    在C语言中,读写INI文件是一个常见的任务,特别是在配置文件处理方面。INI文件是一种简单的文本格式,用于存储用户配置信息或程序设置。由于题目提到不使用Win32系统的DLL,我们将探讨如何纯C语言实现读写INI文件的...

    纯C语言的配置文件读写工程

    c语言下通用的配置文件读写操作代码,可跨平台。

    c语言读写excel文档

    总结来说,“c语言读写excel文档”涉及到利用第三方库在C环境中实现对Excel文件的读写功能。虽然这不是C语言的标准特性,但通过合理选择和使用合适的库,可以有效地完成这项任务。对于VS2005开发环境中的项目,这些...

    linux 配置文件读写C

    这是个不错的c代码,可以用在linux环境下c语言读写配置文件,转给大家下载。

    linux c 配置文件读写

    下面我们将深入探讨如何在C语言中实现对配置文件的读写。 首先,配置文件的格式多种多样,如文本文件(.txt)、INI文件(.ini)等。在提供的压缩包中,我们看到了`iniFileRW.C`和`maintest.c`两个源文件以及`...

    C语言配置文件读写.zip

    在C语言中,配置文件的读写是程序与外部数据交互的重要方式,它允许程序员将应用程序的设置或特定参数保存到文件中,以便在程序运行时动态加载和修改。本教程将详细介绍如何在C语言中处理配置文件的读写操作。 一、...

    纯c读写ini配置文件

    纯c读写ini配置文件 用c/c++读写ini配置文件有不少第三方的开源库,如iniparser、libini、rwini、UltraLightINIParser等,但都不理想,往往代码较大、功能较弱、 接口使用不方便。尤其在大小写处理、前后空格、各种...

    用C语言读取.ini文件

    在Windows下可以用GetPrivateProfileString或GetPrivateProfileInt方便读取.ini配置文件内容,自己尝试写了一下这个函数。还有一些bug,后面慢慢改。

    标准C/C++读写配置文件类,读写ini文件,加入工程就可以用

    标题提到的“标准C/C++读写配置文件类”是指一个专门用于处理INI文件的C++类,它使得开发者能够方便地读取和写入配置文件。这类库通常会封装文件操作的复杂性,提供简洁的API供程序员调用。描述中提到的“非常完美的...

    C语言读写ini文件,用法类似面向对象。.zip

    在这个案例中,“C语言读写ini文件,用法类似面向对象”的主题意味着我们将探讨如何使用C语言来操作INI配置文件,同时保持代码的模块化和易于使用。 INI文件是一种简单的文本格式,常用于存储程序的配置信息,由节...

Global site tag (gtag.js) - Google Analytics