ini文件纯C++读写代码
2007-07-09 23:16
369 查看
前一段时间,一直有朋友在向我索要EVC版本的ini读取函数,由于是公司其他人完成的代码,我不便于公布,正好这段时间重新拾起了成都英创公司的NetBox / NetBoxII相关开发工作,它的系统平台为DOS,开发平台BC3.0。它提供的一个ini读写的代码,我用了一下,非常好使,好东西就要共享,这里我想成都英创公司也不会反对,毕竟我给他也做了一个小小的宣传(我们公司的隧道广告早期的通信子站就是NetBoxII所开发,目前为Moxa公司的通信设备)。:-)
ini读写头文件源码:
这是具体实现代码:
由于是纯C++代码,在VC/EVC中直接使用即可。
注:代码版权归原作者所有
ini读写头文件源码:
//////////////////////////////////////////////////////////////// // // // Configure file Reader for VATL Version2.0 // // // // Author: Wang.Ping // // // // Ver 1.42 // // // // Date: 18/08/99 // // // // (c)Copyright V.A.T.L Development Workgroup // // // // !Read Max Line Length = 2048 // // ---------------------------------------------------------- // // Funciton: // // // // char *GetStrTitle( char *Str, char *Compstr ); // int Get1Par(int Num, char *Par, char *ParStr); // // int Get1Par(int Num, long *Par, char *ParStr); // // int Get1Par(int Num, int *Par, char *ParStr); // // int Get1Par(int Num, float *Par, char *ParStr); // // int Get1Par(int Num, unsigned int *Par, char *ParStr); // // // // int GetField( char *FileName, char *Group, char *Item, // // char *OutStr ); // // int GetField( char *FileName, char *Group, char *Item, // // int Postion, char *OutStr ); // // int GetField( char *FileName, char *Group, char *Item, // // int Postion, int &OutStr ); // // int GetField( char *FileName, char *Group, char *Item, // // int Postion, float &OutStr ); // // int GetField( char *FileName, char *Group, char *Item, // // int Postion, long &OutStr ); // // int GetField( char *FileName, char *Group, char *Item, // // int Postion, unsigned long &OutStr ); // // // // int WriteField( char *FileName, char *Group, char *Item, // // char *OutStr, int Mode=NEW ); // // int WriteField( char *FileName, char *Group, char *Item, // // int &OutStr, int Mode=NEW ); // // int WriteField( char *FileName, char *Group, char *Item, // // float &OutStr, int Mode=NEW ); // // int WriteField( char *FileName, char *Group, char *Item, // // long &OutStr, int Mode=NEW ); // // int WriteField( char *FileName, char *Group, char *Item, // // unsigned long &OutStr, int Mode=NEW ); // // // // int CreatGroupName( char *FileName, char *Group ); // // int ModifyGroupName( char *FileName, char *Group, // // char *NewGroup, int Mode=NEW ); // // // // int DeleteGroup( char *FileName, char *Group ); // // int DeleteField( char *FileName, char *Group, // // char *Item ); // // // // int FindGroupName( char *FileName, char *Group ); // // // // char *READINI::GetVersion( ); // // // //////////////////////////////////////////////////////////////// #if !defined(_READINI_H) #define _READINI_H #define NEW 0 #define MODIFY 1 #define PreMemorySize 512 #define NumricSize 256 enum BL{ READINIOFF=0, READINION=1 }; class READINI { long GetFileLen( char *FileName ); //-1: File Not Found //-2: Cancle //-3: Not Enough memory int CopyFile( char *OldName, char *NewName ); BL AutoBackup; public: READINI(); //Mode = 0 ',' //Mode = 1 ';' int SplitMode; void SetSplitMode( int Mode ); void SetAutoBackup( BL Auto=READINIOFF ); void GetZero( char *Buf ); void GetZeroR( char *Buf ); // Return Title // Str = Str-Title // NULL=not found or Not enough memory char *GetStrTitle( char *Str, char *Compstr ); //return 0: OK // -1: Can not get int Parameters // -2: Not enough memory int Get1Par(int Num, char *Par, char *ParStr); int Get1Par(int Num, long *Par, char *ParStr); int Get1Par(int Num, int *Par, char *ParStr); int Get1Par(int Num, float *Par, char *ParStr); int Get1Par(int Num, unsigned int *Par, char *ParStr); //Read Data From "FileName" // 0: OK //-1: Can not open file //-2: No match field found //-3: Not enough memory int GetField( char *FileName, char *Group, char *Item, char *OutStr ); int GetField( char *FileName, char *Group, char *Item, int Postion, char *OutStr ); int GetField( char *FileName, char *Group, char *Item, int Postion, int &OutStr ); //int GetField( char *FileName, char *Group, char *Item, int Postion, unsigned int &OutStr ); int GetField( char *FileName, char *Group, char *Item, int Postion, float &OutStr ); int GetField( char *FileName, char *Group, char *Item, int Postion, long &OutStr ); int GetField( char *FileName, char *Group, char *Item, int Postion, unsigned long &OutStr ); //Modify Data to "FileName" //-1: File Not Found //-3: Not Enough memory int WriteField( char *FileName, char *Group, char *Item, char *OutStr, int Mode=NEW ); int WriteField( char *FileName, char *Group, char *Item, int &OutStr, int Mode=NEW ); int WriteField( char *FileName, char *Group, char *Item, unsigned &OutStr, int Mode=NEW ); int WriteField( char *FileName, char *Group, char *Item, float &OutStr, int Mode=NEW ); int WriteField( char *FileName, char *Group, char *Item, long &OutStr, int Mode=NEW ); int WriteField( char *FileName, char *Group, char *Item, unsigned long &OutStr, int Mode=NEW ); // int CreatGroupName( char *FileName, char *Group ); int ModifyGroupName( char *FileName, char *Group, char *NewGroup, int Mode=NEW ); // int DeleteGroup( char *FileName, char *Group ); int DeleteField( char *FileName, char *Group, char *Item ); // int FindGroupName( char *FileName, char *Group ); //Get Version information char *GetVersion( ); int GetVer( ); }; extern READINI ReadIni; #endif
这是具体实现代码:
//////////////////////////////////////////////////////////////// // // // Configure file Reader for VATL Version2.0 // // // // Author: Wang.Ping // // // // Ver 1.3 // // // // Date: 23/10/97 // // // // (c)Copyright V.A.T.L Development Workgroup // // // //////////////////////////////////////////////////////////////// #include <string.h> #include <stdio.h> #include <stdlib.h> #include <dir.h> #include "readini.h" #define MAXBUFFER 200 READINI ReadIni; READINI::READINI( ) { } void READINI::GetZero( char *Buf ) { int i=0, j=0; int Len=strlen( Buf ); for( i=0; i<Len; i++ ) { if( Buf[i]==' ' ) { j++; continue; } else { for( i=0; i<strlen(Buf)-j; i++ ) Buf[i]=Buf[i+j]; Buf[i]='\0'; break; } } if( j==Len ) Buf[0]='\0'; for( i=0; i<strlen( Buf ); i++ ) if( Buf[i]=='\n' ) { Buf[i]='\0'; break; } } void READINI::GetZeroR( char *Buf ) { int i=0, j=0; for( i=0; i<strlen( Buf ); i++ ) { if( Buf[i]==' ' ) { j++; continue; } else { for( i=0; i<strlen(Buf)-j; i++ ) Buf[i]=Buf[i+j]; Buf[i]='\0'; break; } } for( i=0; i<strlen( Buf ); i++ ) { if( Buf[i]!=' ' ) { continue; } else { Buf[i]='\0'; } } for( i=0; i<strlen( Buf ); i++ ) if( Buf[i]=='\n' ) { Buf[i]='\0'; break; } } // 0: OK //-1: Can not open file //-2: No match field found int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, char *OutStr ) { char Buf[300]; int i=0, FLAG=0; char *ptr; FILE *Ptr; if(( Ptr=fopen(FileName, "rt"))==NULL ) return -1; while( !FLAG ) { if( fgets( Buf, 256, Ptr )==NULL ) { FLAG=2; break; } GetZero( Buf ); if( !stricmp( Buf, Group ) ) { for( ;; ) { if( fgets( Buf, 256, Ptr )==NULL ) break; GetZero( Buf ); if( Buf[i]=='[' ) { FLAG=2; break; } else if( Buf[i]=='<' ) { FLAG=2; break; } else if( Buf[i]=='(' ) { FLAG=2; break; } ptr=strtok( Buf,"=" ); GetZero( ptr ); //GetZeroR( ptr ); if( !stricmp( Item, ptr ) ) { for( i=0; i<Postion+1; i++ ) { ptr=strtok( NULL,"," ); GetZero( ptr ); //GetZeroR( ptr ); if(ptr==NULL) { if( FLAG!=1 ) FLAG=2; break; } else { strcpy( OutStr, ptr ); FLAG=1; } } } if( FLAG==1 || FLAG==2 ) break; } } } GetZero( OutStr ); fclose( Ptr ); if( FLAG==1 ) return 0; else return -2; } // 0: OK //-1: Can not open file //-2: No match field found int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, int &OutStr ) { char Out_Str[300]; int i=GetField( FileName, Group, Item, Postion, Out_Str ); OutStr = atoi( Out_Str ); return i; } // 0: OK //-1: Can not open file //-2: No match field found int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, float &OutStr ) { char Out_Str[300]; int i=GetField( FileName, Group, Item, Postion, Out_Str ); OutStr = atof( Out_Str ); return i; } // 0: OK //-1: Can not open file //-2: No match field found int READINI::GetField( char *FileName, char *Group, char *Item, int Postion, long &OutStr ) { char Out_Str[300]; int i=GetField( FileName, Group, Item, Postion, Out_Str ); OutStr = atol( Out_Str ); return i; } //return 0: OK // -1: Can not get int Parameters int READINI::Get1Par(int Num, char* Par, char *ParStr) { char strptr[MAXBUFFER]; char *ptr; strcpy(strptr, ParStr); ptr=strtok(strptr,","); if( ptr==NULL ) return -1; //GetZero( ptr ); for(int i=0; i<Num; i++) { if(ptr==NULL) return -1; else ptr=strtok(NULL,","); } if( ptr==NULL ) return -1; GetZero( ptr ); strcpy( Par, ptr ); return 0; } //return 0: OK // -1: Can not get int Parameters int READINI::Get1Par(int Num, int *Par, char *ParStr) { char Par_Str[257]; int i=Get1Par( Num, Par_Str, ParStr ); *Par = atoi( Par_Str ); return i; } //return 0: OK // -1: Can not get int Parameters int READINI::Get1Par(int Num, float *Par, char *ParStr) { char Par_Str[257]; int i=Get1Par( Num, Par_Str, ParStr ); *Par = atof( Par_Str ); return i; } //return 0: OK // -1: Can not get int Parameters int READINI::Get1Par(int Num, unsigned int *Par, char *ParStr) { char Par_Str[257]; int i=Get1Par( Num, Par_Str, ParStr ); *Par = atoi( Par_Str ); return i; } //return 0: OK // -1: Can not get int Parameters int READINI::Get1Par(int Num, long *Par, char *ParStr) { char Par_Str[257]; int i=Get1Par( Num, Par_Str, ParStr ); *Par = atol( Par_Str ); return i; } char *READINI::GetVersion( ) { return "1.30"; }
由于是纯C++代码,在VC/EVC中直接使用即可。
注:代码版权归原作者所有
相关文章推荐
- ini文件纯C++读写代码
- ini文件纯C++读写代码
- ini文件纯C++读写代码
- ini文件纯C++读写代码
- C++文件读写的一些实用代码
- C++对ini配置文件与xml配置文件的读写
- C++读写ini配置文件
- C++ stl 读写ini配置文件
- C++ 读写文件,格式化输出到文件的简单代码
- INI文件读写VBA代码
- C/C++读写文件时莫忘了设置区域代码
- [C/C++]伪读写ini配置文件
- paip.c++读写ini文件.
- C++实现INI文件读写
- C++读写ini配置文件
- C++读写INI配置文件的类实例
- C++读写ini配置文件
- C++读写ini配置文件
- c++读写.ini文件
- 练习写C++代码(101)--简单的文件以及 .gz文件的读写