为什么当前目录会更改

时间:2016-12-20 14:25:30

标签: c windows winapi directory

调用GetOpenFileName后,进程的当前目录将由GetOpenFileName更改为文件打开文件的目录。

如何保留默认的当前目录?

2 个答案:

答案 0 :(得分:4)

当前目录存在,因为它对命令行工具非常方便。它通常用于GUI应用程序,这可能是微软的开发人员不担心允许GetOpenFileName()更改它的原因。当然偶尔会出现边缘情况,你可能正在处理其中一个,尽管很难从你的问题中看出来。 (你绝对确定你想要当前目录,而不是,例如,包含你的可执行文件的目录吗?)

无论如何,如果你想要当前目录,最安全的方法是在程序启动后立即检索它,并使用该保存的值构建完全限定的路径。当您认为可能已更改时,不要只恢复原始当前目录,而是自己构建完全限定的路径。这在多线程代码中或在将来可能需要多线程的代码中(尤其是几乎所有内容)尤其重要,但它也消除了忽略当前目录可能更改的一个或多个代码路径的风险

答案 1 :(得分:4)

  

如何保留默认的当前目录?

如果您阅读了OPENFILENAME documentation,则会出现OFN_NOCHANGEDIR标记,用于此目的:

  

如果用户在搜索文件时更改了目录,则将当前目录还原为其原始值。

尽管文档声称,GetOpenFileName()支持此标记。

另见Raymond Chen关于此主题的博客文章:

Why does the common file dialog change the current directory?