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
|
请发表评论