写日志文件

procedure WriteFile(str1,str2: string);
const
  ErrorLog = '\test.txt';
var
  strPath: string;
  FileT: TextFile;
begin
  strPath := ExtractFileDir(Application.ExeName) + ErrorLog;
  AssignFile(FileT, strPath);
  try
    if FileExists(strPath) then
    begin
      Append(FileT);
      Writeln(FileT, str1+str2);
      Flush(FileT);
    end
    else
    begin
      Rewrite(FileT);
      Writeln(FileT, str1+str2);
      Flush(FileT);
    end;
  finally
    CloseFile(FileT);
  end
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  WriteFile(Edit1.text,edit2.text);
end;
在MFC中实现写入日志文件的功能,通常可以通过自定义一个日志类来完成,该类负责打开、写入和关闭日志文件。MFC提供了对文件操作的支持,结合C++语言特性,可以实现一个功能完善的日志系统。 ### 日志类的设计 可以定义一个`CLogProcedure`类,其中包含写入日志的静态方法。该方法负责检查日志文件是否存在,若不存在则创建,并将日志内容追加到文件末尾。以下是实现的核心代码: ```cpp class CLogProcedure { public: static void WriteLogFile(DWORD dwErrorLevel, LPCTSTR lpOutputString, LPCTSTR lpfunc, INT iline) { // 创建日志文件 CreateLogFile(); // 打开日志文件写入内容 CStdioFile file; CFileException fe; if (file.Open(m_strLogFilePath, CFile::modeWrite | CFile::typeText, &fe)) { // 定位到文件末尾 file.SeekToEnd(); // 构建日志内容 CString strLog; strLog.Format(_T("[%s] %s (Line %d): %s\n"), GetErrorLevelString(dwErrorLevel), lpfunc, iline, lpOutputString); // 写入日志 file.WriteString(strLog); file.Close(); } } private: static void CreateLogFile() { // 获取可执行文件所在目录 CString strExeDir = GetExeDir(); // 拼接日志文件路径 m_strLogFilePath = strExeDir + _T("\\logfile.log"); } static CString GetExeDir() { TCHAR szPath[MAX_PATH] = { 0 }; GetModuleFileName(NULL, szPath, MAX_PATH); CString csFullPath(szPath); int nPos = csFullPath.ReverseFind(_T('\\')); if (nPos < 0) return CString(""); else return csFullPath.Left(nPos); } static CString GetErrorLevelString(DWORD dwErrorLevel) { // 根据错误级别返回对应的字符串 switch (dwErrorLevel) { case 0: return _T("INFO"); case 1: return _T("WARNING"); case 2: return _T("ERROR"); default: return _T("UNKNOWN"); } } static CString m_strLogFilePath; }; ``` ### 使用示例 在实际使用时,可以直接调用`WriteLogFile`方法,传入错误级别、输出字符串、函数名和行号等信息。例如: ```cpp CLogProcedure::WriteLogFile(0, _T("This is an info message."), _T("MyFunction"), 42); ``` ### 注意事项 - 日志文件路径应尽量选择应用程序有写入权限的目录,如可执行文件所在目录或用户临时目录。 - 在多线程环境中,需考虑日志写入的线程安全性,可以使用互斥锁(`CMutex`)来确保日志写入的原子性。 - 日志文件的大小应进行管理,避免无限制增长。可以通过定期清理或使用日志滚动机制来控制文件大小[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值