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

本文介绍了解决含有汉字路径文件无法通过fopen打开的问题。提供了两种解决方案:一是使用_wfopen并转换路径名为wchar_t类型;二是利用CFile对象直接打开文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值