• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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:[email protected]

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

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

Time:2010-9-24

 

 

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Part36to39TalkingaboutDelegatesinc#发布时间:2022-07-13
下一篇:
C# 比较二个时间差。Environment.TickCount发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap