wofstream输出Unicode字串出错!请帮看一下,该怎么解决

wofstream输出Unicode字串出错!请帮看一下
写一个MFC程序用到了C++的标准输出流
(MFC的CFile类感觉输出字符文件不太舒服,估计是我不太会用,那位大虾要有好的建议请提点一下哈)

C/C++ code

wofstream out(strOut);
out.imbue(std::locale("chs"));//这句是搜论坛时加上的,但貌似没任何效果

..........
out<<_T("<HTML>")<<endl;
out<<_T("\t<HEAD>")<<endl;

FileTrans(m_memhead,out);//从CMemFile里向out中转存文件,第一次调用可以正确输出
//如果不加入以下语句,第二次转存将失败:
if(out.bad())out.clear();

FileTrans(m_mempage,out);
...............



下面是FileTrans函数定义
C/C++ code
void CEngine::FileTrans(CFile& fsrc, std::wofstream& out)
{
    ULONGLONG len=fsrc.GetLength();
    char* pBuf=new char[(UINT)len];
    fsrc.Read((PVOID)pBuf,(UINT)len);
    out<<(TCHAR*)pBuf<<endl;               //这个地方很诡异,如果不强制转换就会只读第一个字节。。。
    delete[] pBuf;
}


虽然用out.clear()也能让程序正确运行,但是想搞清楚为什么宽字符输出流输出Unicode就会出错?
另如果对读写Unicode比较有心得的也请分享一下,谢谢!

------解决方案--------------------
char* pBuf=new char[(UINT)len];

用unicode这个是不是要定义成TCHAR
------解决方案--------------------
C/C++ code

void CEngine::FileTrans(CFile& fsrc, std::wofstream& out)
{
    ULONGLONG len=fsrc.GetLength();
    char* pBuf=new char[(UINT)len];
    fsrc.Read((PVOID)pBuf,(UINT)len);
    out<<(TCHAR*)pBuf<<endl;               //这个地方很诡异,如果不强制转换就会只读第一个字节。。。
    delete[] pBuf;
     TCHAR   lpszFile[256];   
      MultiByteToWideChar(CP_ACP,   0,   pFilePathName,   nLen,   lpszFile,   nwLen);  

}

------解决方案--------------------
据我所知,宽字符流不支持unicode编码的文件。因此内存中的宽字符写到文件中就变成了ANSI字符。若想使用unicode编码的文件,可以用boost。
------解决方案--------------------
汗,难道是我写得不清楚,你是Read的时候,没有加结束符,加上应该就好了

如下:
void CEngine::FileTrans(CFile& fsrc, std::wofstream& out) 

ULONGLONG len=fsrc.GetLength(); 
char* pBuf=new char[(UINT)(len + 2)]; 
int rdLen = fsrc.Read((PVOID)pBuf,(UINT)len); 
pBuf[rdLen] = "\0"; 
pBuf[rdLen + 1] = "\0" 
out < <(TCHAR*)pBuf < <endl; //这个地方很诡异,如果不强制转换就会只读第一个字节。。。 
delete[] pBuf; 
}