您的位置:首页 > 其它

MFC 打开路径带有中文名的文件

2014-05-15 19:13 260 查看
        最近在做一个小程序,就是要读取文件进行数据解析,打开文件要使用fopen来实现。但是文件的路径中存在汉字,从而导致使用fopen打开改文件失败的问题,由于不经常使用,花了很久时间才解决了这个问题,于是想把该问题的解决方法记录下来。以下是两种实现方法:

       (1)使用_wfopen来实现: 

           将获取的路径名和文件名的字符串(CString类型)转换为wchar_t类型,如:
CString strPathName;/*获取到的文件名*/

wchar_t *FileName =NULL;

FILE *pFile = NULL;

CFileDialog dlg(TRUE, //TRUE为OPEN对话框,FALSE为SAVE AS对话框
                             NULL, 
                             NULL,
                            OFN_HIDEREADONLY | OFN_FILEMUSTEXIST,
                            //文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,
                            //每种文件类型间用 | 分隔,末尾用 || 指明
                            // (LPCTSTR)_TEXT("JPG Files (*.jpg)|*.jpg|All Files (*.*)|*.*||"),
                            (LPCTSTR)_TEXT("TXT Files (*.txt)|*.txt||"),
                             NULL);

dlg.m_ofn.nFilterIndex = 1;
dlg.m_ofn.hwndOwner = m_hWnd;
dlg.m_ofn.lStructSize = sizeof(OPENFILENAME);
dlg.m_ofn.lpstrTitle = TEXT("打开文本文件...\0");
dlg.m_ofn.nMaxFile = MAX_PATH;

if(dlg.DoModal()==IDOK)
{
        FilePathName = dlg.GetPathName(); //文件名保存在了FilePathName里
}

FileName = strPathName.AllocSysString();

pFile = _wfopen((const wchar_t*)pbyConfigName, L"rb");

SysFreeString(FileName ); // 注意,用完后释放内存!

    (2)创建一个用于打开文件的对象的方式:
CFile file.open((LPCTSTR)strPathName, CFile::modeRead, NULL);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc 对话框 打开文件