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
请问问题可能出现在哪地方?如何解决?谢谢哈
11 个解决方案
#1
TCHAR szBuf[100]=_TEXT("test");
===================
你的szBuf大小是100,但是只初始化了开头几个,后面没有初始化,而且最后也没有加"\0"表示字串结束.
===================
你的szBuf大小是100,但是只初始化了开头几个,后面没有初始化,而且最后也没有加"\0"表示字串结束.
#2
谢谢 wltg2001
WriteFile(hFile,&szSource,len,&dwBytes,NULL); 莫名多了个dwBytes ^_^ 自己的疏忽
WriteFile(hFile,&szBuf,len,&dwBytes,NULL);
WriteFile(hFile,&szSource,len,&dwBytes,NULL); 莫名多了个dwBytes ^_^ 自己的疏忽
WriteFile(hFile,&szBuf,len,&dwBytes,NULL);
#3
WriteFile(hFile,&szSource,len,&dwBytes,NULL);
szSource未定义
用szBuf没有问题啊。
szSource未定义
用szBuf没有问题啊。
#4
TCHAR szBuf[100] = {0};
memcpy(szBuf, _T("test"), 100);
memcpy(szBuf, _T("test"), 100);
#5
HANDLE hFile;
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连接字符串,只有前面显示正常了,后面的是乱的,而且后面的信息会覆盖原来的,大家有没好的解决方案,谢谢哈。
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连接字符串,只有前面显示正常了,后面的是乱的,而且后面的信息会覆盖原来的,大家有没好的解决方案,谢谢哈。
#6
我一般使用ZeroMemory每次都清空一下buffer area
#7
读写文件本身并不复杂,我看你的问题是思路凌乱造成的。
1、首先确认一下你的工程是否为 UNICODE 工程?
2、先做一个简单的小例子,测试打开文件、移动指针、写文件等功能;
3、最后再做正式的程序。
第一点非常重要,如果连 UNICODE 是什么都不知道,那就一定要先解决这个问题。
#8
恩 是UNICODE的
#9
我想是这样的 将异常信息格式化,然后写入文件中,写入内容追加在文件尾。我再看看MSDN文档关于文件API函数的操作 ^_^
THANK YOU zaodt.
THANK YOU zaodt.
#10
WriteFile
这个 API 函数写数据时,是按照 Byte 写的,这时如果是 UNICODE 工程,就需要注意了,如下:
CString str = _T("12345");
UNICODE 下,上面的字符串包含 5 个UNICODE字符,但它占用 10 个 Bytes ,在写文件时,就需要写入 10 个字节;
WriteFile(hFile,str,len,10,NULL);
这个地方一定要注意,写入 5 个字节肯定少写了。
#11
恩 ,收到。这个缓存大小也不好定义,因为也不知道后面会追加多少内容,可以使用PTCHAR?还有就是格式化字符串用哪个函数比较好。
PS:不能使用MFC,尽量用WINDOW API,C标准库函数都禁用,原因就是安全性太低 哎。。。
PS:不能使用MFC,尽量用WINDOW API,C标准库函数都禁用,原因就是安全性太低 哎。。。
#1
TCHAR szBuf[100]=_TEXT("test");
===================
你的szBuf大小是100,但是只初始化了开头几个,后面没有初始化,而且最后也没有加"\0"表示字串结束.
===================
你的szBuf大小是100,但是只初始化了开头几个,后面没有初始化,而且最后也没有加"\0"表示字串结束.
#2
谢谢 wltg2001
WriteFile(hFile,&szSource,len,&dwBytes,NULL); 莫名多了个dwBytes ^_^ 自己的疏忽
WriteFile(hFile,&szBuf,len,&dwBytes,NULL);
WriteFile(hFile,&szSource,len,&dwBytes,NULL); 莫名多了个dwBytes ^_^ 自己的疏忽
WriteFile(hFile,&szBuf,len,&dwBytes,NULL);
#3
WriteFile(hFile,&szSource,len,&dwBytes,NULL);
szSource未定义
用szBuf没有问题啊。
szSource未定义
用szBuf没有问题啊。
#4
TCHAR szBuf[100] = {0};
memcpy(szBuf, _T("test"), 100);
memcpy(szBuf, _T("test"), 100);
#5
HANDLE hFile;
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连接字符串,只有前面显示正常了,后面的是乱的,而且后面的信息会覆盖原来的,大家有没好的解决方案,谢谢哈。
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连接字符串,只有前面显示正常了,后面的是乱的,而且后面的信息会覆盖原来的,大家有没好的解决方案,谢谢哈。
#6
我一般使用ZeroMemory每次都清空一下buffer area
#7
读写文件本身并不复杂,我看你的问题是思路凌乱造成的。
1、首先确认一下你的工程是否为 UNICODE 工程?
2、先做一个简单的小例子,测试打开文件、移动指针、写文件等功能;
3、最后再做正式的程序。
第一点非常重要,如果连 UNICODE 是什么都不知道,那就一定要先解决这个问题。
#8
恩 是UNICODE的
#9
我想是这样的 将异常信息格式化,然后写入文件中,写入内容追加在文件尾。我再看看MSDN文档关于文件API函数的操作 ^_^
THANK YOU zaodt.
THANK YOU zaodt.
#10
WriteFile
这个 API 函数写数据时,是按照 Byte 写的,这时如果是 UNICODE 工程,就需要注意了,如下:
CString str = _T("12345");
UNICODE 下,上面的字符串包含 5 个UNICODE字符,但它占用 10 个 Bytes ,在写文件时,就需要写入 10 个字节;
WriteFile(hFile,str,len,10,NULL);
这个地方一定要注意,写入 5 个字节肯定少写了。
#11
恩 ,收到。这个缓存大小也不好定义,因为也不知道后面会追加多少内容,可以使用PTCHAR?还有就是格式化字符串用哪个函数比较好。
PS:不能使用MFC,尽量用WINDOW API,C标准库函数都禁用,原因就是安全性太低 哎。。。
PS:不能使用MFC,尽量用WINDOW API,C标准库函数都禁用,原因就是安全性太低 哎。。。