调用GetOpenFileName
后,进程的当前目录将由GetOpenFileName
更改为文件打开文件的目录。
如何保留默认的当前目录?
答案 0 :(得分:4)
当前目录存在,因为它对命令行工具非常方便。它通常用于GUI应用程序,这可能是微软的开发人员不担心允许GetOpenFileName()更改它的原因。当然偶尔会出现边缘情况,你可能正在处理其中一个,尽管很难从你的问题中看出来。 (你绝对确定你想要当前目录,而不是,例如,包含你的可执行文件的目录吗?)
无论如何,如果你做想要当前目录,最安全的方法是在程序启动后立即检索它,并使用该保存的值构建完全限定的路径。当您认为可能已更改时,不要只恢复原始当前目录,而是自己构建完全限定的路径。这在多线程代码中或在将来可能需要多线程的代码中(尤其是几乎所有内容)尤其重要,但它也消除了忽略当前目录可能更改的一个或多个代码路径的风险
答案 1 :(得分:4)
如何保留默认的当前目录?
如果您阅读了OPENFILENAME
documentation,则会出现OFN_NOCHANGEDIR
标记,用于此目的:
如果用户在搜索文件时更改了目录,则将当前目录还原为其原始值。
尽管文档声称,GetOpenFileName()
支持此标记。
另见Raymond Chen关于此主题的博客文章:
Why does the common file dialog change the current directory?