MBCS工程使用GetOpenFileNameW方法防止文件乱码

时间:2021-01-26 19:34:54
最近在维护公司的一个老旧系统,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 );