2013-04-09 70 views
1

应用程序在搜索文件时的外观?它在哪里创建?总是指定绝对路径是很现实的。例如。我尝试保存将在项目解决方案的本地bin中的Visual Studio 2010应用程序中使用的文本文件,但始终出现运行时错误。Windows应用程序中使用的文件的工作目录

回答

0

它通常是它被调用的文件夹。您可以使用以下方式找到它:_getcwdhttp://msdn.microsoft.com/en-us/library/sf98bd4y%28VS.80%29.aspx

+0

请定义“它被调用的文件夹”的含义。 – 2013-04-09 18:28:58

+0

历史上,您调用该程序时所处的目录,即'%CD%'。现在,我相信这取决于程序的启动方式。例如,如果它使用链接启动,它通常是程序(.exe)所在的文件夹。但是,它可以在链接的属性中更改。虽然我不确定VC的默认设置是什么。 – mrks 2013-04-09 18:31:26

+0

什么时候该进程改变工作目录? – 2013-04-09 18:32:55

0

如果使用相对路径,则将您提供的路径与进程的工作目录结合在一起。

保持对GUI进程的工作目录的控制是非常困难的。这是因为GUI过程往往以很多不同的方式开始。更重要的是,文件对话有改变工作目录的趋势。最后,工作目录在进程中的所有线程之间共享,并且可以由任何线程更改。有很多陷阱。

所以在一个GUI过程中,我建议你不要使用相对路径。或者,如果您使用相对路径,则在使用它们之前将它们转换为绝对路径。并根据明确定义的根路径执行转换。

除非您正在编写便携式应用程序,否则您不应该期望能够保存到包含可执行文件的目录。在现代系统上,可执行文件通常位于只读目录中。

如果要保存用户设置,请将它们保存在用户配置文件中的适当位置。另一方面,如果您要读取文件,而您从不修改,那么将它们与可执行文件一起存储是合理的。但即使在这种情况下,使用完整的绝对路径打开文件。通过将包含可执行文件的目录与文件的相对路径相结合来创建该路径。

因此,要总结,对你说:

这是很少的现实始终指定绝对路径。

但我不同意。我会反驳说,使用绝对路径往往是最好的选择。但是你不必硬编码绝对路径。您可以并应该在运行时创建它。

相关问题