|  | @@ -1,5 +1,6 @@
 | 
	
		
			
				|  |  |  #include "Assist.h"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +#include <time.h>
 | 
	
		
			
				|  |  | +#include <locale.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace Assist
 | 
	
		
			
				|  |  |  {
 | 
	
	
		
			
				|  | @@ -64,7 +65,7 @@ namespace Assist
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  		if (!PathFileExists(szAppPath))
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  | -			printf("Error, %ls path not exists!\n", szAppPath);
 | 
	
		
			
				|  |  | +			WriteTextLog(_T("Error, %ls path not exists!\n"), szAppPath);
 | 
	
		
			
				|  |  |  			return false;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -85,6 +86,8 @@ namespace Assist
 | 
	
		
			
				|  |  |  			return true;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		WriteTextLog(_T("启动进程失败:%d"), GetLastError());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		return false;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -318,4 +321,53 @@ namespace Assist
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		return hTagWnd;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	void WriteTextLog(const TCHAR* format, ...)
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		// 获取今年年份;
 | 
	
		
			
				|  |  | +		__time64_t gmt = time(NULL);// 获取当前日历时间(1900-01-01开始的Unix时间戳);
 | 
	
		
			
				|  |  | +		struct tm gmtm = { 0 };
 | 
	
		
			
				|  |  | +		localtime_s(&gmtm, &gmt); // 时间戳转成本地时间;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 解析出日志路径;
 | 
	
		
			
				|  |  | +		TCHAR szlogpath[MAX_PATH] = { 0 };
 | 
	
		
			
				|  |  | +		_stprintf_s(szlogpath, _T("%s\\%04d-%02d-%02d.txt"), g_szCurModuleDir, gmtm.tm_year + 1900, gmtm.tm_mon + 1, gmtm.tm_mday);
 | 
	
		
			
				|  |  | +		// 打开或创建文件;
 | 
	
		
			
				|  |  | +		FILE* fp = NULL;
 | 
	
		
			
				|  |  | +		if (_taccess(szlogpath, 0) != -1)
 | 
	
		
			
				|  |  | +		{// 存在;
 | 
	
		
			
				|  |  | +			if (0 == _tfopen_s(&fp, szlogpath, _T("a+")))
 | 
	
		
			
				|  |  | +				// 移动到末尾;
 | 
	
		
			
				|  |  | +				fseek(fp, 0, SEEK_END);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		else
 | 
	
		
			
				|  |  | +		{// 不存在;
 | 
	
		
			
				|  |  | +			_tfopen_s(&fp, szlogpath, _T("w+"));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (fp == NULL)
 | 
	
		
			
				|  |  | +			return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 格式化前设置语言区域;
 | 
	
		
			
				|  |  | +		TCHAR* old_locale = _tcsdup(_tsetlocale(LC_CTYPE, NULL));
 | 
	
		
			
				|  |  | +		_tsetlocale(LC_CTYPE, _T("chs"));//设定中文;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 格式化日志内容;
 | 
	
		
			
				|  |  | +		va_list		args = NULL;
 | 
	
		
			
				|  |  | +		int			len = 0;
 | 
	
		
			
				|  |  | +		TCHAR* buffer = NULL;
 | 
	
		
			
				|  |  | +		va_start(args, format);
 | 
	
		
			
				|  |  | +		// _vscprintf doesn't count. terminating '\0'
 | 
	
		
			
				|  |  | +		len = _vsctprintf(format, args) + 1;
 | 
	
		
			
				|  |  | +		buffer = (TCHAR*)malloc(len * sizeof(TCHAR));
 | 
	
		
			
				|  |  | +		_vstprintf_s(buffer, len, format, args);
 | 
	
		
			
				|  |  | +		// 将日志内容输入到文件中;
 | 
	
		
			
				|  |  | +		_ftprintf(fp, _T("%04d-%02d-%02d %02d:%02d:%02d %s\n"), gmtm.tm_year + 1900, gmtm.tm_mon + 1, gmtm.tm_mday, gmtm.tm_hour, gmtm.tm_min, gmtm.tm_sec, buffer);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 关闭文件,释放资源并设置回原语言区域;
 | 
	
		
			
				|  |  | +		free(buffer);
 | 
	
		
			
				|  |  | +		fclose(fp);
 | 
	
		
			
				|  |  | +		_tsetlocale(LC_CTYPE, old_locale);
 | 
	
		
			
				|  |  | +		free(old_locale);//还原区域设定;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  };
 |