C语言写日志功能

发布于:2021-06-11 05:22:57

1、非常简单的C语言记录文件功能。




#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include

#include

#include ?





#define ?MAX_FILE_LEN 1024*1024





//获取当前系统时间

char* GetNowTime();

//in路径设置,out文件名

void Setlogpath(char* logpath/*in*/, int logpathLen, char* FileName/*out*/);

//获取文件大小

long GetFileSize(char* FileName/*in*/);

//写日志

void WriteLog(char* FileName/*in*/, char* logbuf/*in*/, int logbufsize/*in*/);





//写日志程序

void main()

{ ?


? ? ? ? //获取当前系统时间


? ? ? ?char* TM = GetNowTime();


? ? ? ?printf("当前时间是:%s
",TM);


? ? ? if(NULL != TM )


? ? ? {


? ? ? ? ?free(TM);?


? ? ? ? ?TM = NULL;


? ? ? ? }




? ? ? ? //TEST 文件路径和文件名设置


? ? ? ?char logpath[20] = "E:\";


? ? ? ?int len = strlen(logpath);


? ? ? char filename[50] = {0};


? ? ? Setlogpath(logpath, len, filename);


? ? ? printf("文件为:%s
",filename);





? ? ? ?//TEST 文件大小获取


? ? ? long length = GetFileSize(filename);


? ? ? printf("文件大小为:%d
",length);










? ? ? ?//TEST写日志


? ? ? for (int i=0; i<10; ++i) ?


? ? ? { ?


? ? ? ? ? ? ? ? char* TM = GetNowTime();


? ? ? ? ? ? ? ? printf("%s",TM);


? ? ? ? ? ? ? ? if(NULL != TM )


? ? ? ? ? ? ? ? ? {


? ? ? ? ? ? ? ? ? ?free(TM);?


? ? ? ? ? ? ? ? ? ?TM = NULL;


? ? ? ? ? ? ? ? ? ? }


? ? ? ? ? char strbuf1[32]; ?


? ? ? ? ? memset(strbuf1, 0, sizeof(strbuf1)); ?


? ? ? ? ? sprintf(strbuf1, "====> %d
", i); ?


? ? ? ? ? ?WriteLog(filename, strbuf1, strlen(strbuf1)); ?


? ? ? ? ? printf("文件为:%s
",strbuf1);

? ? ? ? ? #ifdef WIN32 ?//是否windows判断


? ? ? ? ? Sleep(100); // 毫秒 ?

? ? ? ? ? #else ?


? ? ? ? ? sleep(1); ? // 秒 ?

? ? ? ? ? #endif ?


? ? } ?




? ? ? ?printf("hello....
");

? ? ? ?system("pause");

? ? ? ?return ;

}





//获取当前系统时间

char* GetNowTime()

{


struct tm* strTm;


time_t ttime;


time(&ttime);


strTm = localtime(&ttime);






char* NowTimeBuf = (char*)malloc(20 * sizeof(char));


sprintf(NowTimeBuf, "%04d-%02d-%02d %02d:%02d:%02d", strTm->tm_year+1900,


strTm->tm_mon+1, strTm->tm_mday,strTm->tm_hour, strTm->tm_min, strTm->tm_sec);


return NowTimeBuf;

}





//in路径设置,out文件名

void Setlogpath(char* logpath/*in*/, int logpathLen, char* FileName/*out*/)

{


struct tm* strTm;


time_t ttime;


time(&ttime);


strTm = localtime(&ttime);






memcpy(FileName, logpath, logpathLen);






sprintf(FileName+logpathLen, "%04d-%02d-%02d.txt", strTm->tm_year+1900, strTm->tm_mon+1, strTm->tm_mday);





}





//获取文件大小

long GetFileSize(char* FileName/*in*/)

{


long length = 0;


if (FileName != NULL)


{

? ? ? ? FILE* fp = NULL;


fp = fopen(FileName, "rb");


if (fp != NULL)


{


fseek(fp, 0, SEEK_END);


length = ftell(fp);


}






if (fp != NULL)


{


fclose(fp);


fp = NULL;


}


}


return length;

}





//写日志

void WriteLog(char* FileName/*in*/, char* logbuf/*in*/, int logbufsize/*in*/)

{


if (NULL != FileName && NULL != logbuf)


{


if(GetFileSize(FileName) < MAX_FILE_LEN)


{


//文件写操作


? ?FILE* fp = NULL;


fp = fopen(FileName, "a+");


if (NULL != fp)


{ ??


char* TM = GetNowTime();


fwrite(TM, 20, 1, fp);//时间记录


fwrite(logbuf, logbufsize, 1, fp);//内容记录


if(NULL != TM )


{


free(TM);?


TM = NULL;


}


}

? ? ? ? ? ? fclose(fp);


fp = NULL;


}


else


{


//文件过大将删除文件


unlink(FileName);


}


}

}

相关推荐

最新更新

猜你喜欢