C++ 如何转换类型啊 CString的 转换为 char的 代码如下

C++ 怎么转换类型啊 CString的 转换为 char的 代码如下;
CFileDialog dlg(TRUE);
dlg.m_ofn.lpstrTitle = _TEXT("打开人员文件");
dlg.m_ofn.lpstrFilter = __T("文本文档(*.txt)\0*.txt\0\0");
if(IDOK == dlg.DoModal())
{
char ch[100];
CString std;
FILE *file = fopen(dlg.GetPathName(), "r");
int i = 0;
while ((ch[i] = fgetc(file)) != EOF)
{
if (ch == 0)
{
 std = ch;
((CListBox * )GetDlgItem(IDC_LIST1))->AddString(std);
i = 0;
}
i++;
}
}
  fopen  的第一个参数类型不对   各种转换后 要出错   求大神解救C++ 如何转换类型啊 CString的 转换为 char的 代码如下

------解决方案--------------------
好像CString有个GetBuffer方法可以返回char*,你试试看行不行。
fopen(dlg.GetPathName().GetBuffer(), "r");
------解决方案--------------------

/*tchar是TCHAR类型指针,*_char是char类型指针   
void TcharToChar (const TCHAR * tchar, char * _char)  
{  
int iLength ;  
//获取字节长度   
iLength = WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL, NULL);  
//将tchar值赋给_char    
WideCharToMultiByte(CP_ACP, 0, tchar, -1, _char, iLength, NULL, NULL);   



                char filename[MAX_PATH];
TcharToChar(dlg.GetPathName().GetBuffer(), filename);
FILE *file = fopen(filename, "r");

------解决方案--------------------
那你估计是遇到宽字符了,fopen换成_tfopen试试。