代码是这样的
HANDLE hFile;
DWORD dwBytes;
TCHAR szBuf[100]=_TEXT("test");
hFile=CreateFile(_TEXT("C:\\error.txt"),GENERIC_WRITE,FILE_SHARE_WRITE ,\
NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE)
{
return;
}
WORD len=sizeof(szBuf)/sizeof(TCHAR);
SetFilePointer(hFile,len,NULL,FILE_CURRENT);
for (int i=1;i<5;i++)
{
WriteFile(hFile,&szSource,len,&dwBytes,NULL);
}
CloseHandle(hFile);
然后输出的文件会出现乱码
\? 蘚? 烫烫烫\? 烫烫烫\? 烫烫烫\? 烫烫烫 \? 烫烫烫烫t e s t \? 烫烫烫烫t e s t \? 烫烫烫烫t e s t \? 烫烫烫烫t e s t
请问问题可能出现在哪地方?如何解决?谢谢哈
HANDLE hFile;
DWORD dwBytes;
TCHAR szBuf[100]=_TEXT("test");
hFile=CreateFile(_TEXT("C:\\error.txt"),GENERIC_WRITE,FILE_SHARE_WRITE ,\
NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE)
{
return;
}
WORD len=sizeof(szBuf)/sizeof(TCHAR);
SetFilePointer(hFile,len,NULL,FILE_CURRENT);
for (int i=1;i<5;i++)
{
WriteFile(hFile,&szSource,len,&dwBytes,NULL);
}
CloseHandle(hFile);
然后输出的文件会出现乱码
\? 蘚? 烫烫烫\? 烫烫烫\? 烫烫烫\? 烫烫烫 \? 烫烫烫烫t e s t \? 烫烫烫烫t e s t \? 烫烫烫烫t e s t \? 烫烫烫烫t e s t
请问问题可能出现在哪地方?如何解决?谢谢哈
===================
你的szBuf大小是100,但是只初始化了开头几个,后面没有初始化,而且最后也没有加"\0"表示字串结束.
WriteFile(hFile,&szSource,len,&dwBytes,NULL); 莫名多了个dwBytes ^_^ 自己的疏忽
WriteFile(hFile,&szBuf,len,&dwBytes,NULL);
szSource未定义
用szBuf没有问题啊。
memcpy(szBuf, _T("test"), 100);
DWORD dwBytes;
TCHAR szBuf[100]={0};
TCHAR*szSource;
TCHAR* szDescription;
TCHAR* szError;
TCHAR* szErrorMessage;
szSource =(TCHAR*)e.Source();
szDescription=(TCHAR*)e.Description();
szError=(TCHAR*)(LPCSTR)e.Error();
szErrorMessage=(TCHAR*)(LPCSTR)e.ErrorMessage();
wcscpy(szBuf,szSource); // to implement something hFile=CreateFile(_TEXT("C:\\error.txt"),GENERIC_WRITE,FILE_SHARE_WRITE ,\
NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile==INVALID_HANDLE_VALUE)
{
return;
}
WORD len=sizeof(szBuf)/sizeof(TCHAR);
WriteFile(hFile,&szBuf,len,&dwBytes,NULL);
SetFilePointer(hFile,len,NULL,FILE_CURRENT);
CloseHandle(hFile);我的目的是把所有的异常信息以某种格式写入文件,考虑过使用WCSCAT ,和SPRINTF_S,没成功,比如使用WCSCAT连接字符串,只有前面显示正常了,后面的是乱的,而且后面的信息会覆盖原来的,大家有没好的解决方案,谢谢哈。
读写文件本身并不复杂,我看你的问题是思路凌乱造成的。
1、首先确认一下你的工程是否为 UNICODE 工程?
2、先做一个简单的小例子,测试打开文件、移动指针、写文件等功能;
3、最后再做正式的程序。
第一点非常重要,如果连 UNICODE 是什么都不知道,那就一定要先解决这个问题。
THANK YOU zaodt.
WriteFile这个 API 函数写数据时,是按照 Byte 写的,这时如果是 UNICODE 工程,就需要注意了,如下:
CString str = _T("12345");UNICODE 下,上面的字符串包含 5 个UNICODE字符,但它占用 10 个 Bytes ,在写文件时,就需要写入 10 个字节;
WriteFile(hFile,str,len,10,NULL);
这个地方一定要注意,写入 5 个字节肯定少写了。
PS:不能使用MFC,尽量用WINDOW API,C标准库函数都禁用,原因就是安全性太低 哎