前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WinCE程序C/C++/C#实现带时间标记的日志记录

WinCE程序C/C++/C#实现带时间标记的日志记录

作者头像
用户1170933
发布2022-05-10 14:34:52
3840
发布2022-05-10 14:34:52
举报
文章被收录于专栏:python开发者python开发者

WinCE程序C/C++/C#实现带时间标记的日志记录

作者:一点一滴的Beer http://beer.cnblogs.com/

    在程序开发时,为了帮助程序员更好的调试和排错,一般都需要日志记录,这是一个程序员应该养成的良好习惯。本文虽然是在WinCE平台下进行的,但是显然更能够在XP平台上运行,甚至只要对一些文件接口函数进行修改,可以在Linux平台下实现相应功能。

    用C/C++编写WinCE程序时,写登录日志的方法。测试开发板:EPCS-6960I

 一、C语言编写的带时间标记的日志记录方法

代码语言:javascript
复制
#include <stdio.h>
#include "string.h"
#include "process.h"
#include <time.h>
#include <direct.h>//创建文件目录 


void WriteLogMsg(char chLogMsg[])
{
    time_t timeval;
    timeval=time(NULL);//获取本地时间    
    tm tim=*localtime(&timeval);//得到相应的结构体,然后进行内容提取

    char strFilePath[40] = "Log\\";//如果是"\\Log\\"则到了当前盘符的根目录下了。
    char strTimeFileName[20];//将当前时间转换成字符串---声明字符串长度的时候,要比实际长度多1,作为结尾符号

    strftime(strTimeFileName, sizeof(strTimeFileName), "%Y-%m-%d",&tim);//年月日字符串   
    strcat(strTimeFileName,".logFile");//加上扩展名--登录日志
    
    strcat(strFilePath,strTimeFileName);//得到完整的路径名


    FILE *fp;//文件指针

    if ((fp=fopen(strFilePath,"a"))==NULL)//以追加的形式往文件中写东西
    {
        mkdir("Log");//如果在当前目录下没有打开,则重新创建新目录

        if ((fp=fopen(strFilePath,"a"))==NULL)//以追加的形式往文件中写东西
        {
            printf("Open Failed\n");            
            exit(0);
        }
        
    }

    char chTimeTag[20]; //将时间转成字符串
    strftime(chTimeTag, sizeof(chTimeTag), "%Y/%m/%d %X",&tim);//年月日时间字符串--作为登录日志中信息的时间标记头
    
    
    fputs(chTimeTag,fp);//写入时间标记
    fputs(" : ",fp);//分隔符号
    fputs(chLogMsg,fp);//写入消息日志
    fputs("\n",fp);//换行

    int i=fclose(fp);

    if (i==0)
    {
        printf("succeed!\n");        
    }else
    {
        printf("fail!\n");        
    }
}

void main()
{    
    WriteLogMsg("Hello World!Zsm");
}

二、用C++编写的带时间标记的日志记录方法 

代码语言:javascript
复制
void WriteLogMsg(char chLogMsg[])
{

    char strFilePath[40] = "\\FlashDisk2\\Log\\";//如果是"\\Log\\"则到了当前盘符的根目录下了。
    char strTimeFileName[20];//将当前时间转换成字符串---声明字符串长度的时候,要比实际长度多1,作为结尾符号


    SYSTEMTIME sysTime; 
    GetLocalTime( &sysTime ); //得到系统时间
    sprintf(strTimeFileName,"%d-%d-%d",sysTime.wYear,sysTime.wMonth,sysTime.wDay);//"2010-09-21"
    
    strcat(strTimeFileName,".logFile");//加上扩展名--登录日志
    strcat(strFilePath,strTimeFileName);//得到完整的路径名


    FILE *fp;//文件指针
    
    if ((fp=fopen(strFilePath,"a"))==NULL)//以追加的形式往文件中写东西
    {
        //如果打开不成功,则一般表示没有Log目录
        //创建Log目录,然后再重新打开--一般情况下,如果目录存在的话,就不会创建成功的。
        if(!CreateDirectory(_T("\\FlashDisk2\\Log"),NULL)) 
        { 
            printf("Create Directory failed!\n");
        }else 
        {
            printf("Create Directory succeed!\n");//cout << "OK" <<endl; 

            if ((fp=fopen(strFilePath,"a"))==NULL)//以追加的形式往文本文件中写东西
            {
                printf("Open Failed\n");
                exit(0);
            }
        } 
    }

    char strTimeTag[30];//="2010-09-21"; //将时间转成字符串
    sprintf(strTimeTag,"%d-%d-%d  %d:%d:%d  ",sysTime.wYear,sysTime.wMonth,sysTime.wDay,
        sysTime.wHour,sysTime.wMinute,sysTime.wSecond);//"2010-09-21"

    //strftime(chTimeTag, sizeof(chTimeTag), "%Y/%m/%d %X",&tim);//年月日时间字符串--作为登录日志中信息的时间标记头


    fputs(strTimeTag,fp);//写入时间标记
    fputs(" : ",fp);//分隔符号
    fputs(chLogMsg,fp);//写入消息日志
    fputs("\n",fp);//换行

    int i=fclose(fp);

    if (i==0)
    {
        printf("succeed!\n");        
    }else
    {
        printf("fail!\n");        
    }
}

三、用C#编写的带时间标记的日志记录方法 

代码语言:javascript
复制
 /// <summary>
        /// 重要应用:!!!!!写程序故障登录日志记录
        /// </summary>
        /// <param name="strLogMsg"></param>
        public static void WriteLog(string strLogMsg)
        {
            System.IO.FileStream HFile;//先声明一个文件流的句柄,用来存储文件地址 

            string strFileName = System.DateTime.Today.ToString("yyyyMMdd");
            HFile = OpenCreateFile(strFileName);//打开或者创建文件

            strLogMsg = System.DateTime.Now.ToString() + " #Msg: " + strLogMsg + "\r\n";
            WriteFile(HFile, strLogMsg);//写文件           
            CloseFile(HFile);//关闭文件
        }

        /// <summary>
        /// 打开或者创建一个txt文档,这个文档存在于“移动设备”的根目录下面
        /// “我的设备”中的所有文件夹,只有“FlashDisk”和“FlashDisk2”文件夹中的内容掉电后不会丢失,
        /// 所以用户需要保存的文件可以保存在该文件夹中。
        /// </summary>        
        /// <param name="strTextFileName">txt文件的名称</param>
        /// <return>创建的文件的句柄</return>
        private static System.IO.FileStream OpenCreateFile(string strTextFileName)
        {
            System.IO.FileStream HFile;

            string strLogpath = "\\FlashDisk2\\Log";
            if (!Directory.Exists(strLogpath))
                Directory.CreateDirectory(strLogpath);

            string strFilePath = "\\FlashDisk2\\Log\\" + strTextFileName + ".txt";//在移动设备的根目录下面

            try
            {
                HFile = System.IO.File.Open(strFilePath, System.IO.FileMode.OpenOrCreate);

            }
            catch (Exception)
            {
                //MessageBox.Show("文件创建或打开失败");
                HFile = null;
            }

            return HFile;
        }

        /// <summary>
        /// 往文件中写入内容
        /// </summary>
        /// <param name="HFile">文件句柄</param>
        /// <param name="strWriteText">需要写入的内容</param>
        private static void WriteFile(System.IO.FileStream HFile, string strWriteText)
        {
            if (HFile == null)
            {
                // MessageBox.Show("文件未打开");
                return;
            }
            //strWriteText = "Hello File";
            Byte[] buffer;
            buffer = System.Text.Encoding.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage).GetBytes(strWriteText);

            HFile.Position = HFile.Length;
            HFile.Write(buffer, 0, buffer.Length);
        }

        private static void CloseFile(System.IO.FileStream HFile)
        {
            if (HFile != null)
            {
                HFile.Close();
                HFile = null;
            }
        }

------------------------------------------------------------------

Author:一点一滴的Beer

Email /Gtalk:dreamzsm@gmail.com

From:http://www.cnblogs.com/beer

Notes:欢迎转贴,但请在页面中加个链接注明出处

Time:2010-9-24

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档