WinCE程序C/C++/C#實現帶時間標記的日誌記錄

轉自:http://www.cnblogs.com/beer/archive/2010/09/24/1833783.html

    在程序開發時,爲了幫助程序員更好的調試和排錯,一般都需要日誌記錄,這是一個程序員應該養成的良好習慣。本文雖然是在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;
}
}
複製代碼

 

發佈了1 篇原創文章 · 獲贊 13 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章