C读取ini文件的实例详解

  

<强> C读取ini文件

  

<强>前言:

  

在Windows下可以用GetPrivateProfileString或GetPrivateProfileInt方便读取. ini配置文件内容,但是在Linux平台上就一筹莫展了。为了解决该问题,打算用C来读取。ini,即可不受平台的限制了。
  

        #定义CONF_FILE_PATH“Config.ini”   # include & lt; string.h>   # ifdef WIN32   # include & lt; Windows.h>   # include & lt; stdio.h>   其他#   #定义MAX_PATH 260   # include & lt; unistd.h>   # include & lt; fcntl.h>   # include & lt; stdio.h>   # include & lt; stdlib.h>   # include & lt; stdarg.h>   # endif   char g_szConfigPath [MAX_PATH];//获取当前程序目录   int GetCurrentPath (char buf [], char * pFileName)   {   # ifdef WIN32   GetModuleFileName (NULL, buf MAX_PATH);   其他#   char pidfile [64];   int字节;   int fd;   sprintf (pidfile“/proc/% d/cmdline getpid ());   fd=开放(pidfile O_RDONLY 0);   缓冲区字节=阅读(fd, 256);   关闭(fd);   但[MAX_PATH]=' \ 0 ';   # endif   char * p=, buf [strlen (buf)];   做   {   * p=' \ 0 ';   p——;   # ifdef WIN32   },(“\ \”!=* p);   其他#   },(‘/?=* p);   # endif   p + +;//配置文件目录   memcpy (p pFileName strlen (pFileName));   返回0;   }//从INI文件读取字符串类型数据   char * GetIniKeyString (char *标题,char *键,char *文件名)   {   文件*《外交政策》;   char szLine [1024];   静态字符tmpstr [1024];   int rtnval;   int i=0;   int国旗=0;   char * tmp;   如果((fp=fopen(文件名,“r”))==NULL)   {   printf(“没有这样的文件\ n”);   返回";   }   而(! feof (fp))   {   rtnval=获取(fp);   如果(rtnval==EOF)   {   打破;   }   其他的   {   szLine我+ +=rtnval;   }   如果(rtnval==' \ n ')   {   的ifndef WIN32   我,;   # endif   szLine[我]=' \ 0 ';   我=0;   tmp=strchr (szLine, '=');   如果((tmp !=NULL),和(标志==1))   {   如果(strstr (szLine、关键)!=NULL)   {//注释行   如果(' # '==szLine [0])   {   }   else if (‘\/==szLine [0],,“\ \”==szLine [1])   {   }   其他的   {//找打关键对应变量   拷贝字符串(tmpstr, tmp + 1);   文件关闭(fp);   返回tmpstr;   }   }   }   其他的   {   strcpy (tmpstr,“[”);   strcat (tmpstr、标题);   strcat (tmpstr“]”);   如果(strncmp (tmpstr、szLine strlen (tmpstr))==0)   {//找到冠军   标志=1;   }   }   }   }   文件关闭(fp);   返回";   }//从INI文件读取整类型数据   int GetIniKeyInt (char *标题,char *键,char *文件名)   {   返回atoi (GetIniKeyString(标题、关键文件名));   }   int主要(int命令行参数个数,char * argv [])   {   字符缓冲区(MAX_PATH);   memset (buf 0 sizeof (buf));   GetCurrentPath (buf CONF_FILE_PATH);   strcpy (g_szConfigPath buf);   int iCatAge;   char szCatName [32];   iCatAge=GetIniKeyInt(“猫”,“年龄”,g_szConfigPath);   strcpy (szCatName GetIniKeyString(“猫”,“名字”,g_szConfigPath));   返回0;   }   之前            #定义CONF_FILE_PATH“Config.ini”      # include & lt; string.h>      # ifdef WIN32   # include & lt; Windows.h>   # include & lt; stdio.h>   其他#      #定义MAX_PATH 260      # include & lt; unistd.h>   # include & lt; fcntl.h>   # include & lt; stdio.h>   # include & lt; stdlib.h>   # include & lt; stdarg.h>   # endif      char g_szConfigPath [MAX_PATH];//获取当前程序目录   int GetCurrentPath (char buf [], char * pFileName)   {   # ifdef WIN32   GetModuleFileName (NULL, buf MAX_PATH);   其他#   char pidfile [64];   int字节;   int fd;      sprintf (pidfile“/proc/% d/cmdline getpid ());      fd=开放(pidfile O_RDONLY 0);   缓冲区字节=阅读(fd, 256);   关闭(fd);   但[MAX_PATH]=' \ 0 ';      # endif   char * p=, buf [strlen (buf)];   做   {   * p=' \ 0 ';   p——;   # ifdef WIN32   },(“\ \”!=* p);   其他#   },(‘/?=* p);   # endif      p + +;//配置文件目录   memcpy (p pFileName strlen (pFileName));   返回0;   }//从INI文件读取字符串类型数据   char * GetIniKeyString (char *标题,char *键,char *文件名)   {   文件*《外交政策》;   char szLine [1024];   静态字符tmpstr [1024];   int rtnval;   int i=0;   int国旗=0;   char * tmp;      如果((fp=fopen(文件名,“r”))==NULL)   {   printf(“没有这样的文件\ n”);   返回";   }   而(! feof (fp))   {   rtnval=获取(fp);   如果(rtnval==EOF)   {   打破;   }   其他的   {   szLine我+ +=rtnval;   }   如果(rtnval==' \ n ')   {   的ifndef WIN32   我,;   # endif   szLine[我]=' \ 0 ';   我=0;   tmp=strchr (szLine, '=');      如果((tmp !=NULL),和(标志==1))   {   如果(strstr (szLine、关键)!=NULL)   {//注释行   如果(' # '==szLine [0])   {   }   else if (‘\/==szLine [0],,“\ \”==szLine [1])   {      }   其他的   {//找打关键对应变量   拷贝字符串(tmpstr, tmp + 1);   文件关闭(fp);   返回tmpstr;   }   }   }   其他的   {   strcpy (tmpstr,“[”);   strcat (tmpstr、标题);   strcat (tmpstr“]”);   如果(strncmp (tmpstr、szLine strlen (tmpstr))==0)   {//找到冠军   标志=1;   }   }   }   }   文件关闭(fp);   返回";   }//从INI文件读取整类型数据   int GetIniKeyInt (char *标题,char *键,char *文件名)   {   返回atoi (GetIniKeyString(标题、关键文件名));   }      int主要(int命令行参数个数,char * argv [])   {   字符缓冲区(MAX_PATH);   memset (buf 0 sizeof (buf));   GetCurrentPath (buf CONF_FILE_PATH);   strcpy (g_szConfigPath buf);      int iCatAge;   char szCatName [32];      iCatAge=GetIniKeyInt(“猫”,“年龄”,g_szConfigPath);   strcpy (szCatName GetIniKeyString(“猫”,“名字”,g_szConfigPath));      返回0;   }   

C读取ini文件的实例详解