写UNICODE格式的文本日志文件(UNICODE编码)

转载:http://blog.csdn.net/abcpanpeng/article/details/1481740

HANDLE CreateUnicodeFile(CStringW strPath)
{
HANDLE hFile=NULL;
//创建文件
hFile=CreateFile(strPath,
GENERIC_WRITE|GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(INVALID_HANDLE_VALUE==hFile)
{
AfxMessageBox(FormartLastError(GetLastError()));
return NULL;
}
DWORD dwValue=0;
DWORD dwSize=0;
dwSize = GetFileSize (hFile, NULL) ;
if (dwSize == 0xFFFFFFFF)
{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return NULL;
}
if(dwSize==0)
{
TCHAR p=0xfeff;//UNICODE文件开头标志
if(!WriteFile(hFile,&p,sizeof(TCHAR),&dwValue,NULL))
{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return NULL;
}
}
return hFile;
}

BOOL WriteLogFile(CStringW sLogMsg)
{
CStringW sFileName;
if(sFileName.IsEmpty())
{
sFileName=GetCurrentPath();//获取应用程序所在目录
sFileName=sFileName+TEXT("log//");//创建log文件夹
CheckDirectory(sFileName);
CString sdate;
CTime tt=CTime::GetTickCount();
CString strtt=tt.Format("log_%Y-%m-%d.txt");
sFileName=sFileName+strtt;
}
HANDLE hFile=CreateUnicodeFile(sFileName);//创建UNICODE格式文件
if(NULL==hFile)
{
AfxMessageBox(FormartLastError(GetLastError()));
return FALSE;
}
DWORD dwValue=0;
DWORD dwSize=0;
dwSize = GetFileSize (hFile, NULL) ;
if (dwSize == 0xFFFFFFFF)
{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
long logcount=0;
int iLength=0;
DWORD ftype=GetFileType(hFile);
if(ftype!=FILE_TYPE_DISK)//检测文件是否为磁盘文件
return FALSE;
TCHAR buff[10];
wmemset((WCHAR*)buff,L'0',10);
if(dwSize!=2)//如果已经写日志
{
//移动至文件开头sizeof(TCHAR)处
DWORD p=SetFilePointer(hFile,sizeof(TCHAR),NULL,FILE_CURRENT);
if(p==0xFFFFFFFF)
{
return FALSE;
}
//读取日志记录数 00000000
if(!ReadFile(hFile,buff,10*sizeof(TCHAR),&dwValue,NULL))
{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
logcount=wcstol((WCHAR*)buff,NULL,10);
}
CStringW sCount;
logcount=logcount+1;
sCount.Format(TEXT("%d"),logcount);
for(int i=0;i<sCount.GetLength();i++)
buff[8-sCount.GetLength()+i]=sCount[i];
buff[8]='/r';
buff[9]='/n';
SetFilePointer(hFile,sizeof(TCHAR),NULL,FILE_BEGIN);//移动至文件开头2
//写日志记录数
if(!WriteFile(hFile,buff,(int)10*sizeof(TCHAR),&dwValue,NULL))
{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
SetFilePointer(hFile,NULL,NULL,FILE_END);//移动至文件尾部
CTime t=CTime::GetTickCount();
CString sMsg=t.Format("[%Y-%m-%d %H:%M:%S] ");
sLogMsg=sMsg+sLogMsg+TEXT("/r/n");
iLength = sLogMsg.GetLength();
//写日志
if(!WriteFile(hFile,sLogMsg.GetBuffer(),(int)iLength*sizeof(TCHAR), &dwValue, NULL))
{
AfxMessageBox(FormartLastError(GetLastError()));
CloseHandle(hFile);
return FALSE;
}
//关闭文件
CloseHandle(hFile);
return TRUE;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值