unicode模式下写日志文件
来源:互联网 发布:mysql distinct 编辑:程序博客网 时间:2024/05/18 00:45
在C/C++/VC/MFC技术交流群【197778914】中看到大牛VOID写的打造简易日志函数的视频,于是想自己写一个UNICODE版本的
在stdafx.h中定义函数
void TraceLog(TCHAR* lpszFormat, ...);
在stdafx.cpp中实现该函数(原来还可以这样,那就可以把一些公用的函数写在这个cpp里面)
void TraceLog(TCHAR* lpszFormat, ...)
{
va_list args;
TCHAR sTemp[512] = _T("");
va_start(args, lpszFormat);
_vsntprintf(sTemp, sizeof(sTemp)/sizeof(TCHAR), lpszFormat, args);
va_end(args);
//日期
SYSTEMTIME sysTime;
::GetLocalTime(&sysTime);
TCHAR sTrace[1024] = _T("");
_stprintf(sTrace, _T("[%02u:%02u:%02u: %02u:%02u:%02u] %s\r\n")
, sysTime.wYear, sysTime.wMonth, sysTime.wDay
, sysTime.wHour, sysTime.wMinute, sysTime.wSecond
, sTemp);
//输出到文件
FILE* pFile = NULL;
DWORD dwAttr = ::GetFileAttributes(_T("C:\\TraceLog.txt"));
if (dwAttr == 0xffffffff) //文件第一次打开
{
pFile = _tfopen(_T("C:\\TraceLog.txt"), _T("ab"));
#ifdef _UNICODE
unsigned char u[2] = {0xff,0xfe};//写入UNICODE的头
fwrite(u,2,1,pFile);
#endif
}
else
{
pFile = _tfopen(_T("C:\\TraceLog.txt"), _T("ab"));
}
fwrite(sTrace, 1, _tcslen(sTrace)*sizeof(TCHAR), pFile);
fclose(pFile);
pFile = NULL;
}
写了一个button按钮,测试日志的功能
void CTraceLogDemoDlg::OnBnClickedButton1()
{
int i = 3;
float f = 3.14f;
//::TraceLog("i=%d, f=%f", ++i, f);
::TraceLog(_T("HELLO WORLD. %s, i+9=%d, i-10=%d"), _T("你好呀"), i+9, i-10);
//HELLO WORLD. 你好呀, i+9=12, i-10=-7
}
工程设置为unicode字符集和多字节字符集时,均可正确显示。
unicode的文件写入时,应该先写入UNICODE的头,0xFF0xFE
另外,最初写入的时候发现换行符显示不正常,后来网上查阅资料发现unicode的文件打开的时候,最好用二进制的方式b
- unicode模式下写日志文件
- UNICODE模式下使用rapidxml写xml文件
- UNICODE模式下使用rapidxml写XML文件
- 写UNICODE格式的文本日志文件(UNICODE编码)
- 写UNICODE格式的文本日志文件(UNICODE编码)
- Linux下写日志文件
- Unicode编码下向文件写汉字
- 如何将Unicode文本写到日志文件中
- 如何将Unicode文本写到日志文件中
- VC++unicode项目使用CFile类写txt日志文件
- Qt下写日志文件的函数
- windows下写日志文件的代码
- 笔记-写Unicode文件
- 写文件UNICODE相关
- UNICODE下日志打印(2)
- 写UniCode与Ansi文件
- 写日志到专案目录下的txt文件中
- 多线程下写日志
- 在Linux下安装R语言软件
- openwrt DTSI文件解译
- 工具栏中嵌入Combo Box
- MySQL主从切换步骤。
- IOS怎么样更有效率更全面的使用xcode之四大问题
- unicode模式下写日志文件
- 关于andriod 数据库操作的优化
- iOS之JSONKit解析JSON
- Redis学习
- [笔记]关于系统字体变化导致APP界面混乱问题
- Java基础之String
- Resolve Tree Conflict SVN
- C#窗体间传值
- 单例模式的多种实现