代码是这样的
        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 
请问问题可能出现在哪地方?如何解决?谢谢哈

解决方案 »

  1.   

    TCHAR szBuf[100]=_TEXT("test"); 
    ===================
    你的szBuf大小是100,但是只初始化了开头几个,后面没有初始化,而且最后也没有加"\0"表示字串结束.
      

  2.   

    谢谢 wltg2001 
    WriteFile(hFile,&szSource,len,&dwBytes,NULL);   莫名多了个dwBytes  ^_^ 自己的疏忽
    WriteFile(hFile,&szBuf,len,&dwBytes,NULL);
      

  3.   

    WriteFile(hFile,&szSource,len,&dwBytes,NULL); 
    szSource未定义
    用szBuf没有问题啊。
      

  4.   

    TCHAR szBuf[100] = {0};
    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连接字符串,只有前面显示正常了,后面的是乱的,而且后面的信息会覆盖原来的,大家有没好的解决方案,谢谢哈。
      

  6.   

    我一般使用ZeroMemory每次都清空一下buffer area
      

  7.   


    读写文件本身并不复杂,我看你的问题是思路凌乱造成的。
    1、首先确认一下你的工程是否为 UNICODE 工程?
    2、先做一个简单的小例子,测试打开文件、移动指针、写文件等功能;
    3、最后再做正式的程序。
    第一点非常重要,如果连 UNICODE 是什么都不知道,那就一定要先解决这个问题。
      

  8.   

    我想是这样的   将异常信息格式化,然后写入文件中,写入内容追加在文件尾。我再看看MSDN文档关于文件API函数的操作  ^_^
    THANK YOU  zaodt.
      

  9.   


    WriteFile这个 API 函数写数据时,是按照 Byte 写的,这时如果是 UNICODE 工程,就需要注意了,如下:
    CString str = _T("12345");UNICODE 下,上面的字符串包含 5 个UNICODE字符,但它占用 10 个 Bytes ,在写文件时,就需要写入 10 个字节;
    WriteFile(hFile,str,len,10,NULL);
    这个地方一定要注意,写入 5 个字节肯定少写了。
      

  10.   

    恩  ,收到。这个缓存大小也不好定义,因为也不知道后面会追加多少内容,可以使用PTCHAR?还有就是格式化字符串用哪个函数比较好。
    PS:不能使用MFC,尽量用WINDOW API,C标准库函数都禁用,原因就是安全性太低 哎