// stdafx.cpp : 只包括标准包含文件的源文件 // PutOutBinary.pch 将作为预编译头 // stdafx.obj 将包含预编译类型信息 #include "stdafx.h" #include #define DB_SS_CONN_WITH_PORT _T("driver={SQL Server};Server=%s,%d;database=%s;uid=%s;pwd=%s") #define DB_SS_CONN_WITHOUT_PORT _T("driver={SQL Server};Server=%s;database=%s;uid=%s;pwd=%s") #define DB_SS_CONN_WITHOUT_PORT2 _T("driver={SQL Server};Server=%s;database=%d;uid=%s;pwd=%s") #define DB_SW_CONN_WITH_PORT _T("Driver={SQL Server};Server=%s,%d;Database=%s;Trusted_Connection=yes;") #define DB_SW_CONN_WITHOUT_PORT _T("Driver={SQL Server};Server=%s;Database=%s;Trusted_Connection=yes;") #define DB_SW_CONN_WITHOUT_PORT2 _T("Driver={SQL Server};Server=%s;Database=%d;Trusted_Connection=yes;") ////////////////////////////////////////////////////////////////////////// // 全局变量: TCHAR g_szIniFile[MAX_PATH] = {0}; TCHAR g_szModulePath[MAX_PATH] = { 0 }; TCHAR g_szModuleFileName[MAX_PATH] = { 0 }; TCHAR g_szDBSource[MAX_PATH] = {0}; TCHAR g_szDBAccount[MAX_PATH] = { 0 }; TCHAR g_szDBPassWord[MAX_PATH] = { 0 }; TCHAR g_szDBName[MAX_PATH] = { 0 }; TCHAR g_szConnectString[MAX_PATH] = {0}; DWORD g_dwDBServerPort = 0; /************************************************************************/ /* 函数:[8/31/2017 IT]; /* 描述:; /* 参数:; /* [IN] :; /* [OUT] :; /* [IN/OUT] :; /* 返回:void; /* 注意:; /* 示例:; /* /* 修改:; /* 日期:; /* 内容:; /************************************************************************/ int GetSysIniInfo(const TCHAR *szPath, const TCHAR *szIniName) { TCHAR szDrive[_MAX_DRIVE] = { 0 }; TCHAR szDir[_MAX_DIR] = { 0 }; TCHAR szFName[_MAX_FNAME] = { 0 }; TCHAR szExt[_MAX_EXT] = { 0 }; ::GetModuleFileName(NULL, g_szModulePath, sizeof(g_szModulePath) / sizeof(TCHAR)); _stprintf_s(g_szModulePath, MAX_PATH, _T("%s"), g_szModulePath); _tsplitpath_s(g_szModulePath, szDrive, szDir, szFName, szExt); _tcscpy_s(g_szModulePath, szDrive); _tcscat_s(g_szModulePath, szDir); if (szPath != NULL && szIniName != NULL) _stprintf_s(g_szIniFile, _T("%s%s"), szPath, szIniName); else _stprintf_s(g_szIniFile, _T("%sDatabase.ini"), g_szModulePath); HANDLE hFile = CreateFile(g_szIniFile, 0/*GENERIC_READ*/, 0, NULL, OPEN_EXISTING, 0, NULL); if (ERROR_FILE_NOT_FOUND == GetLastError()) { return -1; } CloseHandle(hFile); // 获取服务器端信息; GetPrivateProfileString(_T("DatabaseInfo"), _T("dbSource"), _T(""), g_szDBSource, MAX_PATH, g_szIniFile); g_dwDBServerPort = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbServerPort"), 0, g_szIniFile); GetPrivateProfileString(_T("DatabaseInfo"), _T("dbAccount"), _T(""), g_szDBAccount, MAX_PATH, g_szIniFile); GetPrivateProfileString(_T("DatabaseInfo"), _T("dbPassWord"), _T(""), g_szDBPassWord, MAX_PATH, g_szIniFile); GetPrivateProfileString(_T("DatabaseInfo"), _T("dbName"), _T(""), g_szDBName, MAX_PATH, g_szIniFile); if (g_dwDBServerPort != 0) { if (_tcscmp(g_szDBAccount, _T("")) == 0) _stprintf_s(g_szConnectString, DB_SW_CONN_WITH_PORT, g_szDBSource, g_dwDBServerPort, g_szDBName); else _stprintf_s(g_szConnectString, DB_SS_CONN_WITH_PORT, g_szDBSource, g_dwDBServerPort, g_szDBName, g_szDBAccount, g_szDBPassWord); } else { if (_tcscmp(g_szDBAccount, _T("")) == 0) _stprintf_s(g_szConnectString, DB_SW_CONN_WITHOUT_PORT, g_szDBSource, g_szDBName); else _stprintf_s(g_szConnectString, DB_SS_CONN_WITHOUT_PORT, g_szDBSource, g_szDBName, g_szDBAccount, g_szDBPassWord); } return 0; } /************************************************************************/ /* 函数:WriteTextLog[7/28/2016 IT]; /* 描述:写文本日志; /* 参数:; /* [IN] :; /* 返回:void; /* 注意:; /* 示例:; /* /* 修改:; /* 日期:; /* 内容:; /************************************************************************/ void WriteTextLog(const TCHAR *format, ...) { try { //static ThreadSection _critSection; //AutoThreadSection aSection(&_critSection); // 解析出日志路径; TCHAR szlogpath[MAX_PATH] = { 0 }; static TCHAR szModulePath[MAX_PATH] = { 0 }; static TCHAR szFna[_MAX_DIR] = { 0 }; if (szModulePath[0] == _T('\0')) { TCHAR szDrive[_MAX_DRIVE] = { 0 }; TCHAR szDir[_MAX_DIR] = { 0 }; TCHAR szExt[_MAX_DIR] = { 0 }; ::GetModuleFileName(NULL, szModulePath, sizeof(szModulePath) / sizeof(TCHAR)); _tsplitpath_s(szModulePath, szDrive, szDir, szFna, szExt); _tcscpy_s(szModulePath, szDrive); _tcscat_s(szModulePath, szDir); } _stprintf_s(szlogpath, _T("%s%s%s.txt"), szModulePath, szFna, CTime::GetCurrentTime().Format("[%Y-%m-%d]")); // 打开或创建文件; CStdioFile fp; if (PathFileExists(szlogpath)) { if (fp.Open(szlogpath, CFile::modeWrite) == FALSE) { return; } fp.SeekToEnd(); } else { if (!fp.Open(szlogpath, CFile::modeCreate | CFile::modeWrite)) 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_p(format, args); if (len == -1) { goto clear; } len++; buffer = (TCHAR*)malloc(len * sizeof(TCHAR)); _vstprintf_s(buffer, len, format, args); // C4996 // Note: vsprintf is deprecated; consider using vsprintf_s instead // 将日志内容输入到文件中; //fp.WriteString(CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S "))); fp.WriteString(buffer); fp.WriteString(_T("\n")); // 关闭文件,释放资源并设置回原语言区域; free(buffer); clear: _tsetlocale(LC_CTYPE, old_locale); free(old_locale);//还原区域设定; fp.Close(); } catch (CException *e) { e->ReportError(); e->Delete(); } }