ini文件纯C++读写代码

前一段时间,一直有朋友在向我索要EVC版本的ini读取函数,由于是公司其他人完成的代码,我不便于公布,正好这段时间重新拾起了成都英创公司的NetBox / NetBoxII相关开发工作,它的系统平台为DOS,开发平台BC3.0。它提供的一个ini读写的代码,我用了一下,非常好使,好东西就要共享,这里我想成都英创公司也不会反对,毕竟我给他也做了一个小小的宣传(我们公司的隧道广告早期的通信子站就是NetBoxII所开发,目前为Moxa公司的通信设备)。:-)

ini读写头文件源码:


  1. ////////////////////////////////////////////////////////////////  
  2. //                                  //  
  3. //         Configure file Reader for VATL Version2.0          //  
  4. //                                                            //  
  5. //                  Author: Wang.Ping                         //  
  6. //                                                            //  
  7. //                       Ver 1.42                             //  
  8. //                                                            //  
  9. //                    Date: 18/08/99                          //  
  10. //                                                  //  
  11. //        (c)Copyright V.A.T.L Development Workgroup          //  
  12. //                                                            //  
  13. //         !Read Max Line Length = 2048                 //  
  14. // ---------------------------------------------------------- //  
  15. //   Funciton:                                                //  
  16. //                                                            //  
  17. //   char *GetStrTitle( char *Str, char *Compstr );  
  18. //   int  Get1Par(int Num, char  *Par, char *ParStr);         //  
  19. //   int  Get1Par(int Num, long  *Par, char *ParStr);         //  
  20. //   int  Get1Par(int Num, int   *Par, char *ParStr);         //  
  21. //   int  Get1Par(int Num, float *Par, char *ParStr);         //  
  22. //   int  Get1Par(int Num, unsigned int *Par, char *ParStr);  //  
  23. //                                                            //  
  24. //   int GetField( char *FileName, char *Group, char *Item,   //  
  25. //                 char *OutStr );                            //  
  26. //   int GetField( char *FileName, char *Group, char *Item,   //  
  27. //                 int Postion, char *OutStr );               //  
  28. //   int GetField( char *FileName, char *Group, char *Item,   //  
  29. //           int Postion, int  &OutStr );               //  
  30. //   int GetField( char *FileName, char *Group, char *Item,   //  
  31. //           int Postion, float &OutStr );              //  
  32. //   int GetField( char *FileName, char *Group, char *Item,   //  
  33. //           int Postion, long &OutStr );               //  
  34. //   int GetField( char *FileName, char *Group, char *Item,   //  
  35. //           int Postion, unsigned long &OutStr );      //  
  36. //                                                            //  
  37. //   int WriteField( char *FileName, char *Group, char *Item, //  
  38. //           char *OutStr, int Mode=NEW );              //  
  39. //   int WriteField( char *FileName, char *Group, char *Item, //  
  40. //           int  &OutStr, int Mode=NEW );              //  
  41. //   int WriteField( char *FileName, char *Group, char *Item, //  
  42. //           float &OutStr, int Mode=NEW );             //  
  43. //   int WriteField( char *FileName, char *Group, char *Item, //  
  44. //           long  &OutStr, int Mode=NEW );             //  
  45. //   int WriteField( char *FileName, char *Group, char *Item, //  
  46. //           unsigned long  &OutStr, int Mode=NEW );    //  
  47. //                                                            //  
  48. //   int CreatGroupName( char *FileName, char *Group );       //  
  49. //   int ModifyGroupName( char *FileName, char *Group,        //  
  50. //                 char *NewGroup, int Mode=NEW );            //  
  51. //                                                            //  
  52. //   int DeleteGroup( char *FileName, char *Group );          //  
  53. //   int DeleteField( char *FileName, char *Group,            //  
  54. //           char *Item );                              //  
  55. //                                                            //  
  56. //   int FindGroupName( char *FileName, char *Group );        //  
  57. //                                                            //  
  58. //   char *READINI::GetVersion( );                            //  
  59. //                                                            //  
  60. ////////////////////////////////////////////////////////////////  
  61.  
  62. #if     !defined(_READINI_H)  
  63. #define _READINI_H  
  64.  
  65. #define NEW    0  
  66. #define MODIFY 1  
  67. #define PreMemorySize      512  
  68. #define NumricSize       256  
  69.  
  70. enum BL{ READINIOFF=0, READINION=1 };  
  71.  
  72. class READINI  
  73. {  
  74.    long GetFileLen( char *FileName );  
  75.    //-1: File Not Found  
  76.    //-2: Cancle  
  77.    //-3: Not Enough memory  
  78.    int  CopyFile( char *OldName, char *NewName );  
  79.    BL   AutoBackup;  
  80. public:  
  81.    READINI();  
  82.    //Mode = 0 ','  
  83.    //Mode = 1 ';'  
  84.    int  SplitMode;  
  85.    void SetSplitMode( int Mode );  
  86.  
  87.    void SetAutoBackup( BL Auto=READINIOFF );  
  88.  
  89.    void GetZero( char *Buf );  
  90.    void GetZeroR( char *Buf );  
  91.    // Return Title  
  92.    // Str = Str-Title  
  93.    // NULL=not found or Not enough memory  
  94.    char *GetStrTitle( char *Str, char *Compstr );  
  95.     //return 0:  OK  
  96.     //      -1:  Can not get int Parameters  
  97.     //        -2:  Not enough memory  
  98.    int  Get1Par(int Num, char  *Par, char *ParStr);  
  99.    int  Get1Par(int Num, long  *Par, char *ParStr);  
  100.    int  Get1Par(int Num, int   *Par, char *ParStr);  
  101.    int  Get1Par(int Num, float *Par, char *ParStr);  
  102.    int  Get1Par(int Num, unsigned int *Par, char *ParStr);  
  103.    //Read Data From "FileName"  
  104.    // 0: OK  
  105.    //-1: Can not open file  
  106.    //-2: No match field found  
  107.    //-3: Not enough memory  
  108.    int GetField( char *FileName, char *Group, char *Item, char *OutStr );  
  109.    int GetField( char *FileName, char *Group, char *Item, int Postion, char *OutStr );  
  110.    int GetField( char *FileName, char *Group, char *Item, int Postion, int  &OutStr );  
  111.    //int GetField( char *FileName, char *Group, char *Item, int Postion, unsigned int  &OutStr );  
  112.    int GetField( char *FileName, char *Group, char *Item, int Postion, float &OutStr );  
  113.    int GetField( char *FileName, char *Group, char *Item, int Postion, long &OutStr );  
  114.    int GetField( char *FileName, char *Group, char *Item, int Postion, unsigned long &OutStr );  
  115.    //Modify Data to "FileName"  
  116.    //-1: File Not Found  
  117.    //-3: Not Enough memory  
  118.    int WriteField( char *FileName, char *Group, char *Item, char *OutStr, int Mode=NEW );  
  119.    int WriteField( char *FileName, char *Group, char *Item, int  &OutStr, int Mode=NEW );  
  120.    int WriteField( char *FileName, char *Group, char *Item, unsigned &OutStr, int Mode=NEW );  
  121.    int WriteField( char *FileName, char *Group, char *Item, float &OutStr, int Mode=NEW );  
  122.    int WriteField( char *FileName, char *Group, char *Item, long  &OutStr, int Mode=NEW );  
  123.    int WriteField( char *FileName, char *Group, char *Item, unsigned long  &OutStr, int Mode=NEW );  
  124.    //  
  125.    int CreatGroupName( char *FileName, char *Group );  
  126.    int ModifyGroupName( char *FileName, char *Group, char *NewGroup, int Mode=NEW );  
  127.    //  
  128.    int DeleteGroup( char *FileName, char *Group );  
  129.    int DeleteField( char *FileName, char *Group, char *Item );  
  130.    //  
  131.    int FindGroupName( char *FileName, char *Group );  
  132.    //Get Version information  
  133.    char *GetVersion( );  
  134.    int  GetVer( );  
  135. };  
  136.  
  137. extern READINI ReadIni;  
  138. #endif  
  139.  

这是具体实现代码:    


  1. ////////////////////////////////////////////////////////////////  
  2. //                                  //  
  3. //         Configure file Reader for VATL Version2.0          //  
  4. //                                                            //  
  5. //                  Author: Wang.Ping                         //  
  6. //                                                            //  
  7. //                       Ver 1.3                              //  
  8. //                                                            //  
  9. //                    Date: 23/10/97                          //  
  10. //                                                  //  
  11. //        (c)Copyright V.A.T.L Development Workgroup          //  
  12. //                                                            //  
  13. ////////////////////////////////////////////////////////////////  
  14. #include <string.h>  
  15. #include <stdio.h>  
  16. #include <stdlib.h>  
  17. #include <dir.h>  
  18.  
  19. #include "readini.h"  
  20. #define  MAXBUFFER   200  
  21.  
  22. READINI ReadIni;  
  23.  
  24. READINI::READINI( )  
  25. {  
  26. }  
  27.  
  28. void READINI::GetZero( char *Buf )  
  29. {  
  30.    int i=0, j=0;  
  31.    int Len=strlen( Buf );  
  32.    for( i=0; i<Len; i++ )  
  33.       {  
  34.       if( Buf[i]==' ' )   { j++; continue; }  
  35.       else 
  36.      {  
  37.      for( i=0; i<strlen(Buf)-j; i++ )  
  38.         Buf[i]=Buf[i+j];  
  39.      Buf[i]='\0';  
  40.   break;  
  41.   }  
  42.       }  
  43.    if( j==Len )  
  44.       Buf[0]='\0';  
  45.    for( i=0; i<strlen( Buf ); i++ )  
  46.       if( Buf[i]=='\n' )   { Buf[i]='\0'break; }  
  47. }  
  48. void READINI::GetZeroR( char *Buf )  
  49. {  
  50.    int i=0, j=0;  
  51.    for( i=0; i<strlen( Buf ); i++ )  
  52.       {  
  53.       if( Buf[i]==' ' )   { j++; continue; }  
  54.       else 
  55.   {  
  56.   for( i=0; i<strlen(Buf)-j; i++ )  
  57.      Buf[i]=Buf[i+j];  
  58.   Buf[i]='\0';  
  59.   break;  
  60.   }  
  61.       }  
  62.    for( i=0; i<strlen( Buf ); i++ )  
  63.       {  
  64.       if( Buf[i]!=' ' )   { continue; }  
  65.       else { Buf[i]='\0'; }  
  66.       }  
  67.    for( i=0; i<strlen( Buf ); i++ )  
  68.       if( Buf[i]=='\n' )   { Buf[i]='\0'break; }  
  69. }  
  70. // 0: OK  
  71. //-1: Can not open file  
  72. //-2: No match field found  
  73. int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, char *OutStr )  
  74. {  
  75.    char Buf[300];  
  76.    int i=0, FLAG=0;  
  77.    char *ptr;  
  78.    FILE *Ptr;  
  79.    if(( Ptr=fopen(FileName, "rt"))==NULL )  
  80.       return -1;  
  81.    while( !FLAG )  
  82.       {  
  83.       if( fgets( Buf, 256, Ptr )==NULL )  
  84.   { FLAG=2; break; }  
  85.       GetZero( Buf );  
  86.  
  87.       if( !stricmp( Buf, Group ) )  
  88.   {  
  89.   for( ;; )  
  90.      {  
  91.      if( fgets( Buf, 256, Ptr )==NULL )  
  92.         break;  
  93.      GetZero( Buf );  
  94.      if( Buf[i]=='[' ) { FLAG=2; break; }  
  95.      else if( Buf[i]=='<' ) { FLAG=2; break; }  
  96.      else if( Buf[i]=='(' ) { FLAG=2; break; }  
  97.      ptr=strtok( Buf,"=" );  
  98.      GetZero( ptr );  
  99.      //GetZeroR( ptr );  
  100.      if( !stricmp( Item, ptr ) )  
  101.         {  
  102.         for( i=0; i<Postion+1; i++ )  
  103.     {  
  104.     ptr=strtok( NULL,"," );  
  105.     GetZero( ptr );  
  106.     //GetZeroR( ptr );  
  107.     if(ptr==NULL)  
  108.        { if( FLAG!=1 ) FLAG=2;  break; }  
  109.     else 
  110.        { strcpy( OutStr, ptr ); FLAG=1; }  
  111.     }  
  112.         }  
  113.      if( FLAG==1 || FLAG==2 )   break;  
  114.      }  
  115.   }  
  116.       }  
  117.    GetZero( OutStr );  
  118.    fclose( Ptr );  
  119.    if( FLAG==1 )  
  120.       return 0;  
  121.    else 
  122.       return -2;  
  123. }  
  124. // 0: OK  
  125. //-1: Can not open file  
  126. //-2: No match field found  
  127. int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, int &OutStr )  
  128. {  
  129.    char Out_Str[300];  
  130.    int i=GetField( FileName, Group, Item, Postion, Out_Str );  
  131.    OutStr = atoi( Out_Str );  
  132.    return i;  
  133. }  
  134. // 0: OK  
  135. //-1: Can not open file  
  136. //-2: No match field found  
  137. int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, float &OutStr )  
  138. {  
  139.    char Out_Str[300];  
  140.    int i=GetField( FileName, Group, Item, Postion, Out_Str );  
  141.    OutStr = atof( Out_Str );  
  142.    return i;  
  143. }  
  144.  
  145. // 0: OK  
  146. //-1: Can not open file  
  147. //-2: No match field found  
  148. int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, long &OutStr )  
  149. {  
  150.    char Out_Str[300];  
  151.    int i=GetField( FileName, Group, Item, Postion, Out_Str );  
  152.    OutStr = atol( Out_Str );  
  153.    return i;  
  154. }  
  155. //return 0:  OK  
  156. //      -1:  Can not get int Parameters  
  157. int READINI::Get1Par(int Num, char* Par, char *ParStr)  
  158. {  
  159.    char strptr[MAXBUFFER];  
  160.    char *ptr;  
  161.    strcpy(strptr, ParStr);  
  162.    ptr=strtok(strptr,",");  
  163.    if( ptr==NULL )   return -1;  
  164.    //GetZero( ptr );  
  165.    for(int i=0; i<Num; i++)  
  166.       {  
  167.       if(ptr==NULL)  
  168.   return -1;  
  169.       else 
  170.   ptr=strtok(NULL,",");  
  171.       }  
  172.    if( ptr==NULL ) return -1;  
  173.    GetZero( ptr );  
  174.    strcpy( Par, ptr );  
  175.    return 0;  
  176. }  
  177. //return 0:  OK  
  178. //      -1:  Can not get int Parameters  
  179. int READINI::Get1Par(int Num, int *Par, char *ParStr)  
  180. {  
  181.    char Par_Str[257];  
  182.    int i=Get1Par( Num, Par_Str, ParStr );  
  183.    *Par = atoi( Par_Str );  
  184.    return i;  
  185. }  
  186. //return 0:  OK  
  187. //      -1:  Can not get int Parameters  
  188. int READINI::Get1Par(int Num, float *Par, char *ParStr)  
  189. {  
  190.    char Par_Str[257];  
  191.    int i=Get1Par( Num, Par_Str, ParStr );  
  192.    *Par = atof( Par_Str );  
  193.    return i;  
  194. }  
  195. //return 0:  OK  
  196. //      -1:  Can not get int Parameters  
  197. int READINI::Get1Par(int Num, unsigned int *Par, char *ParStr)  
  198. {  
  199.    char Par_Str[257];  
  200.    int i=Get1Par( Num, Par_Str, ParStr );  
  201.    *Par = atoi( Par_Str );  
  202.    return i;  
  203. }  
  204. //return 0:  OK  
  205. //      -1:  Can not get int Parameters  
  206. int READINI::Get1Par(int Num, long *Par, char *ParStr)  
  207. {  
  208.    char Par_Str[257];  
  209.    int i=Get1Par( Num, Par_Str, ParStr );  
  210.    *Par = atol( Par_Str );  
  211.    return i;  
  212. }  
  213.  
  214. char *READINI::GetVersion( )  
  215. {  
  216.    return "1.30";  
  217. }  
  218.  

      由于是纯C++代码,在VC/EVC中直接使用即可。

      注:代码版权归原作者所有

 

 












本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/323481,如需转载请自行联系原作者

上一篇:脱北者:朝鲜黑客技术比谷歌一流工程师还好!


下一篇:kvm虚拟化学习笔记(十九)之convirt集中管理平台搭建