C++:无论我是 运行 来自 IDE 的程序还是作为独立的可执行文件,都可以找到某个文件夹

C++: Find a certain folder regardless of if I am running the program from an IDE or as a standalone executable

假设我的程序需要访问当前存储在 bin 中的文件夹 'Files' 中的某些文件。在 Visual Studio 中,我可以将当​​前工作目录指定为 'bin',因此如果我 运行 将我的代码与 Visual Studio 结合使用,那么我只能按名称访问文件夹文件,而无需任何附加文件路径信息。例如

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

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

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

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


UPD.

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

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

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

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

STANDALONE 是在IDE.

之外测试软件时定义的宏