mapgis6.7二次开发vc6_demo 之三(文件操作通用函数)
//FileOpClass.cpp文件内容如下所示:
////////////////////////////////////////////////////////////////// // //文件操作 //#include FileOpClass // ////////////////////////////////////////////////////////////////// #include "demo.h" char* LogFileName="AppErrorLog.log"; char* CurExeDir; //文件操作的属性 FILE* fp; char* filepath=""; //实现 获取当前可执行文件所在目录 char* GetCurDir(void) { //推荐用如下方法来得到当前程序所在目录比较安全: //void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext ); //函数来分解开始提到的_pgmptr,然后再用 //void _makepath( char *path, const char *drive, const char *dir, const char *fname, const char *ext ); //函数来对分解后的路径进行组合。这两个函数结合起来功能强大,使用灵活, //基本上所有的有关目录和路径方面的操作都可以搞定. //(1) char* szFilePath=new char[MAX_PATH]; memset(szFilePath,0,MAX_PATH); GetModuleFileNameA(NULL,szFilePath,MAX_PATH); //GetModuleFileNameW(NULL,szFilePath,MAX_PATH); char* szfp=new char[strlen(szFilePath)+1]; strcpy(szfp,szFilePath); int srcLen=strlen(szfp)+1; char* Driver=new char[srcLen]; char* dir=new char[srcLen]; char* fn=new char[srcLen]; char* ext=new char[srcLen]; // memset(Driver,0,srcLen); memset(dir,0,srcLen); memset(fn,0,srcLen); memset(ext,0,srcLen); //分解路径 _splitpath(szfp,Driver,dir,fn,ext); char* dri=new char[strlen(Driver)+1]; strcpy(dri,Driver); char* dir_t=new char[strlen(dir)+1]; strcpy(dir_t,dir); //组合目录 int len=strlen(dri)+strlen(dir_t); char* result=new char[len]; memset(result,0,len); sprintf(result, "%s\\%s",dri,dir_t); char* r=new char[strlen(result)+1]; strcpy(r,result); return r; } //实现 合并字符串函数 char* UnionStr(const char* A,const char* B) { int len=0; string str_A(A); string str_B(B); len=strlen(str_A.data())+strlen(str_B.data()); char* result=new char[len]; memset(result,0,len); sprintf(result, "%s%s",str_A.data(),str_B.data()); //sprintf(result, "%.*s%.*s", strlen(A), A, strlen(B), B); char* r=new char[strlen(result)+1]; strcpy(r,result); return r; } char* strcat_lc(const char* A,const char* B) { return UnionStr(A,B); } //实现 写日志 int WriteToLog(char* str) { FILE* log; char* curdir; if(CurExeDir==NULL) { CurExeDir=GetCurDir(); } curdir=CurExeDir; char* Logfile=UnionStr(curdir,LogFileName); log=fopen(Logfile,"a+"); if(log==NULL) return 0; fprintf(log,"%s\n",str); fclose(log); return 1; } int WriteToLog(const char* str) { FILE* log; char* curdir; if(CurExeDir==NULL) { CurExeDir=GetCurDir(); } curdir=CurExeDir; char* Logfile=UnionStr(curdir,LogFileName); log=fopen(Logfile,"a+"); if(log==NULL) return 0; fprintf(log,"%s\n",str); fclose(log); return 1; } int WriteToLog_f_delete(void) { char* curdir; if(CurExeDir==NULL) { CurExeDir=GetCurDir(); } curdir=CurExeDir; char* Logfile=UnionStr(curdir,LogFileName); return f_delete(Logfile); } const char* StrCopy(const char* src) { if(src==NULL) return NULL; string tmp(src); return tmp.data(); } char* strcpy_lc(const char* src) { if(src==NULL) return NULL; string tmp(src); const char* ct=tmp.data(); char* t=new char[strlen(ct)]; strcpy(t,ct); return t; } //实现 字符串是否相等函数 bool EqStr(const char* A,const char* B) { bool r=true; char* t_A=new char[strlen(A)+1]; strcpy(t_A,A); char* t_B=new char[strlen(B)+1]; strcpy(t_B,B); int ALen=strlen(t_A); int BLen=strlen(t_B); if(ALen>=BLen) ALen=BLen; { for(int i=0;i<ALen;i++) { if(t_A[i]!=t_B[i]) { r=false; break; } } } return r; } bool IsNumber(string str) { bool r=true; const char* t=str.c_str(); int Len=strlen(t); for(int i=0;i<Len;i++) { if(!isdigit(t[i])) { r=false; break; } } return r; } //------------------------------------------------------- //实现 设置文件操作的路径 void f_SetFilePath(char* pfilepath) { filepath=pfilepath; } int f_delete(char* pfilepath) { return remove(pfilepath); } //实现 打开文件操作 bool f_OpenFile_r(void) { char* path=filepath; if((fp=fopen(path,"r"))==NULL) { printf("file cannot be opened\n"); return false; } return true; } bool f_OpenFile_w(void) { char* path=filepath; if((fp=fopen(path,"w"))==NULL) { printf("file cannot be opened\n"); return false; } return true; } //实现 检查文件是否结束函数 int f_EndFile(void) { return feof(fp); } //实现 读取下一行函数 char* f_NextLine() { char line[4000]; if(fgets(line,4000,fp)!=NULL) { char* ret=new char[strlen(line)+1]; strcpy(ret,line); return ret; } return NULL; } //实现 写入一行函数 int f_WriteLine(char* line) { if(fp!=NULL) { return fprintf(fp,"%s\n",line); } return -1; } //实现 保存内存缓存数据函数 int f_FlushFile(void) { if(fp!=NULL) { return fflush(fp); } return -1; } //实现 关闭文件函数 int f_CloseFile(void) { if(fp!=NULL) { return fclose(fp); } return -1; } //--------------------------
--vp:hsg
--create date:2012-04-12