LogTrace.cpp
上传用户:lczygg
上传日期:2007-07-03
资源大小:2947k
文件大小:4k
源码类别:

语音合成与识别

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////////////
  2. //  LogTrace.cpp -- Implementation of the CLogTrace class
  3. #include "stdafx.h"
  4. #include <afxdisp.h>
  5. #include "LogTrace.h"
  6. /**************************************************
  7.  How to use CLogTrace
  8. 1.  Make a static CLogTrace object as a member of the application class
  9. 2. Add the following lines to the InitInstance of the program
  10. m_LogTrace.m_strAppName = "MyApp"; // use appropriate name here
  11. m_LogTrace.SetFileName("Log.txt"); // sets the log file name and puts it in the exe path
  12. m_LogTrace.OnStartup(TRUE, TRUE); // activates the log trace
  13. 3.  Also in InitInstance, add the following line if you want to empty the log file
  14. each time the application starts
  15. m_LogTrace.ResetFile();
  16. 4.  Any time you want to write to the log file, use the CLogTrace::WriteLine functions
  17. these will write the text along with date and time
  18. *******************************************************/
  19. //////////////////////////////////////////////////////
  20. //  Construction/Destruction
  21. CLogTrace::CLogTrace()
  22. {
  23. m_bActive = FALSE;
  24. m_bTimeStamp = TRUE;
  25. CString s;
  26. }
  27. CLogTrace::~CLogTrace()
  28. {
  29. }
  30. ////////////////////////////////////////////////////////
  31. //  CLogTrace operations
  32. void CLogTrace::ResetFile()
  33. {
  34. CStdioFile f;
  35. CFileException fe;
  36. CString s;
  37. if (m_strFileName.IsEmpty()) return;
  38. if (f.Open(m_strFileName, CFile::modeWrite | CFile::modeCreate, &fe) == FALSE)
  39. {
  40. return;
  41. }
  42. f.Close();
  43. }
  44. // bActive tells us if we want the trace to be active or not
  45. // bTimeStamp tells us if we want time stamps on each line
  46. // eliminating the time stamp allows us to use this class for a regular log file
  47. void CLogTrace::OnStartup(BOOL bActive, BOOL bTimeStamp)
  48. {
  49. m_bActive = bActive;
  50. m_bTimeStamp = bTimeStamp;
  51. if (bTimeStamp == FALSE) return;
  52. CString s;
  53. // these ***'s help to indicate when one ru of the program ends and another starts
  54. // because we don't always overwrite the file each time
  55. WriteLine("nn******************************************nn");
  56. s.Format("%s Log Trace %snn", m_strAppName, COleDateTime::GetCurrentTime().Format());
  57. WriteLine(s);
  58. }
  59. // function to write a line of text to the log file
  60. void CLogTrace::WriteLine(LPCTSTR szLine)
  61. {
  62. try
  63. {
  64. FILE *fp = fopen(m_strFileName, "a");
  65. CString s;
  66. if (m_bTimeStamp)
  67. {
  68. fputs(COleDateTime::GetCurrentTime().Format(), fp);
  69. fputs("t", fp);
  70. }
  71. fputs(szLine, fp);
  72. fputs("n", fp);
  73. fclose(fp);
  74. }
  75. catch(...)
  76. {
  77. AfxMessageBox("改写日志错误");
  78. }
  79. /*CStdioFile f;
  80. CFileException fe;
  81. CString s;
  82. if (m_bActive == FALSE) return;
  83. if (m_strFileName.IsEmpty()) return;
  84. if (f.Open(m_strFileName, CFile::modeWrite | CFile::modeCreate |
  85. CFile::modeNoTruncate, &fe) == FALSE)
  86. {
  87. return;
  88. }
  89. try
  90. {
  91. f.SeekToEnd();
  92. TRACE("LOGGIN %sn", szLine);
  93. if (m_bTimeStamp)
  94. {
  95. s.Format("%st%sn", COleDateTime::GetCurrentTime().Format(),
  96. szLine);
  97. }
  98. else
  99. {
  100. s.Format("%sn", szLine);
  101. }
  102. f.WriteString(s);
  103. }
  104. catch (CException* e)
  105. {
  106. e->Delete();
  107. }
  108. f.Close();*/
  109. }
  110. // function to write a line of text, with an extra string
  111. void CLogTrace::WriteLine(LPCTSTR szFormat, LPCTSTR szAddInfo)
  112. {
  113. if (m_bActive == FALSE) return;
  114. CString s;
  115. s.Format(szFormat, szAddInfo);
  116. WriteLine(s);
  117. }
  118. // funtion to write a line of text with an extra integer
  119. void CLogTrace::WriteLine(LPCTSTR szFormat, int nAddInfo)
  120. {
  121. if (m_bActive == FALSE) return;
  122. CString s;
  123. s.Format(szFormat, nAddInfo);
  124. WriteLine(s);
  125. }
  126. // function to set the log file name.  don't pass a fill path!
  127. // just pass something like "log.txt"
  128. // the file will be placed in the same dir as the exe file
  129. void CLogTrace::SetFileName(LPCTSTR szFileName)
  130. {
  131. TCHAR drive[_MAX_PATH], dir[_MAX_PATH], name[_MAX_PATH], ext[_MAX_PATH];
  132. const char *path = _pgmptr ;
  133. _splitpath(path, drive, dir, name, ext);
  134. m_strFileName.Format("%s%s%s", drive, dir, szFileName);
  135. }