【问题标题】:C++: Find a certain folder regardless of if I am running the program from an IDE or as a standalone executableC++:无论我是从 IDE 运行程序还是作为独立的可执行文件运行程序,都可以找到某个文件夹
【发布时间】:2017-05-08 09:56:37
【问题描述】:

假设我的程序需要访问文件夹“Files”中的某个文件,该文件夹当前存储在 bin 中。在 Visual Studio 中,我可以将当​​前工作目录指定为“bin”,因此如果我使用 Visual Studio 运行我的代码,那么我可以仅按名称访问文件夹文件,而无需任何其他文件路径信息。例如

std::ifstream file;
file.open("Files\\someFile.txt");

但是,如果我将我的程序作为独立的可执行文件运行,那么它当然无法找到 Files。这是一个问题,因为我打算将其作为独立的可执行文件进行测试。

处理这种情况的通常方法是什么?

【问题讨论】:

    标签: c++ visual-studio file filepath relative-path


    【解决方案1】:

    您可以将路径保存在注册表中。在您的开发系统上,您可以手动将密钥添加到包含路径的注册表中,当您发布软件时,您可以使用安装程序将此密钥设置为您需要的任何内容。查看this link from the Microsoft web page了解如何使用注册表。

    如果您知道您的文件始终位于可执行文件所在的文件夹中,您还可以使用the windows API function GetModuleFileName 检索可执行文件的路径。有时这在与预编译器块连接时很有用,例如:

    #ifdef STANDALONE
    ... GetModuleFileName ... 
    #else
    ... [open hard coded path] ...
    #endif
    

    STANDALONE 是您定义的宏,当您想在 IDE 之外测试软件时。

    【讨论】:

      【解决方案2】:

      在您的程序中使用相对路径时,您基本上是在要求操作系统相对于当前工作目录进行搜索。不是来自可执行文件所在的目录。因此,如果您的可执行文件位于以下位置 C:\a\out.exe 并且您在 C:\b 中使用 ..\a\out.exe 调用它,您的工作目录仍将是 C:\b
      从 Visual Studio 运行时会发生这种情况(默认情况下)。 您可以在项目设置 - 配置属性/调试中更改它。将工作目录从 $(ProjectDir) 更改为 $(TargetDir)


      更新。

      在此处了解有关 MSVC 项目宏的更多信息:https://msdn.microsoft.com/en-us/library/c02as0cs.aspx

      【讨论】:

      • 那么 TargetDir 到底是什么?
      • @Jimmy_Rustle $(TargetDir) 设置为您的目标目录。在您的情况下,目标是可执行文件。您可以在配置属性/常规中查看有关当前目标设置的更多信息
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 2019-12-07
      • 2013-08-27
      相关资源
      最近更新 更多