mapgis6.7二次开发vc6_demo 之三(文件操作通用函数)

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

你可能感兴趣的:(mapgis6.7二次开发vc6_demo 之三(文件操作通用函数))