MFC打印文本Log日志含时间

这是一个在MFC程序调试中很有用的小函数,可以输出字符消息,并记录时间,而且不像Afxmessage那样,它不会阻塞

头文件,可以是全局也可以放在某个类里面,无论在哪里,只需要声明这个就行

BOOL TestLog(CString csText);

cpp文件,这里需要导入一些头文件

#include <string>//std下使用string类型
#include<fstream>//对文件进行操作的头文件
using namespace std;//如果没有这个,需要在某些资源前面声明std的作用域,如用string 创建变量的时候
BOOL TestLog(CString csText)
{
	csText += +_T("\r");
	std::string sText = CW2A(csText.GetString());

	SYSTEMTIME st;
	char* cDat = new char[1024];
	char* cTime = new char[1024];
	char* cValue = new char[1024];
	char* cText = new char[1024];

	ZeroMemory(cDat, 1024);          //数组初始化,如果不初始化会乱码
	ZeroMemory(cTime, 1024);
	ZeroMemory(cValue, 1024);
	ZeroMemory(cText, 1024);

	std::string sPathName;

	GetLocalTime(&st);//获取系统日期

	std::sprintf(cDat, "%.4d-%.2d-%.2d", st.wYear, st.wMonth, st.wDay);         //将整型变量转换成字符串
	std::sprintf(cTime, "%.2d:%.2d:%.2d  ", st.wHour, st.wMinute, st.wSecond);
	std::sprintf(cValue, "%s %s", cDat, cTime);                   //将字符串合并
	sText = cTime + sText;
	std::sprintf(cText, sText.c_str());                           //string赋值给char*

	sPathName = cDat;
	sPathName = "TestLog\\" + sPathName + ".txt";//最终的路径
	std::ofstream OutFile;
	OutFile.open(sPathName, std::fstream::out | std::fstream::app);//写入,创建,追加
	OutFile.write(cText, strlen(cText));
	OutFile.close();

	cDat = NULL;//因为要经常调用,记得释放资源
	cTime = NULL;
	cValue = NULL;
	cText = NULL;
	delete[] cDat;
	delete[] cTime;
	delete[] cValue;
	delete[] cText;

	return true;
}

然后直接调用就好了,像当一个函数出现闪退的时候,你可以使用这个函数打印出消息,当到达出问题的语句时就不再输出了
在这里插入图片描述

注意,使用之前需要先创建TestLog文件夹,这个文件夹的路径是指定的,如果是编译好的软件环境里使用,其路径应该放在与".exe"同一级的目录,而如果是vs直接调试,则放在与你的".rc"同一级的目录
在这里插入图片描述
刚刚运行的效果是:
在这里插入图片描述
如果sprintf报错,那就去项目属性-》C++下面把sdl检查关掉
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值