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;
}
//--------------------------
--the--end--
--vp:hsg
--create date:2012-04-12