最近在维护公司的一个老旧系统,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 );