C语言写日志功能

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


#define _CRT_SECURE_NO_WARNINGS

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <windows.h> 


#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\n",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\n",filename);


       //TEST 文件大小获取
      long length = GetFileSize(filename);
      printf("文件大小为:%d\n",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\n", i);  
           WriteLog(filename, strbuf1, strlen(strbuf1));  
          printf("文件为:%s\n",strbuf1);
          #ifdef WIN32  //是否windows判断
          Sleep(100); // 毫秒  
          #else  
          sleep(1);   // 秒  
          #endif  
    }  

       printf("hello....\n");
       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);
}
}
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值