zoukankan      html  css  js  c++  java
  • WinCE程序C/C++/C#实现带时间标记的日志记录

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

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

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

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

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

    #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++编写的带时间标记的日志记录方法 

    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#编写的带时间标记的日志记录方法 

    /// <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

     
  • 相关阅读:
    查看Mysql版本
    Day03_SpringCloud2
    Day01_SpringBoot
    【Java面试题】如何判断一个字符串中某个字符出现的次数?
    你以为这样写Java代码很6,但我看不懂
    smart-socket实战:玩转心跳消息
    JVM 对象分配过程
    Spring Cloud基于Redis实现的分布式锁
    Python10行以内代码能有什么高端操作
    会话技术之Cookie详解
  • 原文地址:https://www.cnblogs.com/beer/p/1833783.html
Copyright © 2011-2022 走看看