【问题标题】:Working directories of files used in Windows applicationsWindows 应用程序中使用的文件的工作目录
【发布时间】:2013-04-01 07:27:31
【问题描述】:

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

【问题讨论】:

    标签: windows search directory absolute-path


    【解决方案1】:

    通常是调用它的文件夹。你可以使用_getcwd:http://msdn.microsoft.com/en-us/library/sf98bd4y%28VS.80%29.aspx找到它

    【讨论】:

    • 请定义“调用它的文件夹”是什么意思。
    • 历史上,你调用程序时所在的目录,即%CD%。如今,我相信这取决于程序的启动方式。例如,如果它是使用链接启动的,它通常是程序 (.exe) 所在的文件夹。但是,它可以在链接的属性中进行更改。不过,我不确定 VC 的默认设置是什么。
    • 那么当进程改变工作目录时呢?
    • 我明白你的意思——你完全正确。我的假设是,当有人故意更改工作目录时,他知道工作目录是什么。在那种情况下,这个问题很可能已经过时了。
    • 在控制台应用程序中,一切都基于工作目录。但在 GUI 应用程序中并不清楚。工作目录经常被弄得一团糟。
    【解决方案2】:

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

    很难控制 GUI 进程的工作目录。这是因为 GUI 进程往往以许多不同的方式启动。更重要的是,文件对话框有改变工作目录的趋势。最后,工作目录在进程中的所有线程之间共享,并且可以被任何线程更改。有很多陷阱。

    因此,在 GUI 过程中,我建议您永远不要使用相对路径。或者,如果您确实使用相对路径,则在使用它们之前将它们转换为绝对路径。并针对明确定义的根路径执行该转换。

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

    如果您想保存用户设置,请将它们保存在用户配置文件中的适当位置。

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

    所以,总结一下,你说:

    总是指定绝对路径是不太现实的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2019-09-24
      • 1970-01-01
      相关资源
      最近更新 更多