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

        最近在做一个小程序,就是要读取文件进行数据解析,打开文件要使用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);


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值