C++ GetOpenFileName对话框OFN_FILEMUSTEXIST标志不生效问题
问题解答
你配置的标志组合存在冲突,OFN_FILEMUSTEXIST不生效的核心原因是你同时加了OFN_NOVALIDATE标志。
标志冲突说明
OFN_FILEMUSTEXIST:要求用户输入的文件名必须对应已存在的文件,不满足时自动弹出警告框,这是你需要的标志。OFN_PATHMUSTEXIST:要求用户输入的路径必须是已存在的合法路径,和上面的标志搭配使用是正常的。OFN_NOVALIDATE:作用是禁用所有文件名合法性校验,加了这个标志后,对话框会直接返回用户输入的任意内容,完全跳过路径存在、文件存在的检查流程,直接让前面两个校验标志失效。
修正代码
把OFN_NOVALIDATE从Flags配置中移除即可,修正后的Flags赋值:
opn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
额外提个容易踩的坑:调用GetOpenFileName()前,最好把lpstrFile指向的文件缓冲区首字符设为\0清空,避免缓冲区里的残留旧内容被对话框误读,引发异常校验问题。
内容的提问来源于stack exchange,提问作者nabi
相关产品推荐
相关产品推荐

