最近在维护公司的一个老旧系统,mfc开发,有用户反馈选择特殊字符的文件后,无法正常显示。
检查代码发现,该工程使用的是多字节字符集,选择文件采用的是CFileDialog类,特殊字符或者韩文、日文都无法正常读取。
网上查找资料发现GetOpenFileName方法也可以用来选择文件,特分享给大家。
OPENFILENAMEW ofn;
::memset( &ofn, 0, sizeof( ofn ) );
WCHAR filePath[MAX_PATH] = {0};
ofn.lStructSize = sizeof( ofn );
ofn.lpstrFile = filePath;
ofn.lpstrFilter = L"All files (*.*)\0*.*\0";
ofn.nMaxFile = MAX_PATH;
ofn.nFilterIndex = 0;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrDefExt = L"";
ofn.Flags = OFN_EXPLORER | OFN_ENABLESIZING | OFN_HIDEREADONLY;
GetOpenFileNameW( &ofn );