0

我正在尝试加载文件,以前我使用的是硬编码的文件位置(例如“c:\location\file.txt”),但现在一些朋友也在使用该文件,我想允许他们将可执行文件放在他们想要的任何地方。

我当前的代码如下所示:

ifstream myfile;
myfile.open("c:\\client\\settings.cfg");

我正在尝试更改它,以便用户将他们的可执行文件放入他们想要的任何文件夹中,然后他们创建一个文件夹并将他们的设置文件放入其中,exe 将使用他们的设置加载它。

ifstream myfile;
myfile.open("\\settings\\settings.cfg");

我有一些基本的错误处理,现在程序总是出错,说它找不到文件。

文件结构如下所示:

[ART]
  asset.png
[SETTINGS]
  settings.cfg
client.exe

这似乎是一件非常简单的事情,但我找不到任何方法。每个关于读取和写入文件的示例和教程都只处理可执行文件目录中的文件,或者硬编码到 c:\folder...

谁能指出我是如何做到这一点的?

4

2 回答 2

5

大多数系统的搜索路径从当前工作目录开始,然后是PATH环境变量。因此,您需要做的就是指定没有绝对路径标记的文件/文件夹,它将使用相对于工作目录的路径:

ifstream myfile;
myfile.open("settings\\settings.cfg");
//           ^^ Note the lack of \\ to start the file path
于 2013-11-04T03:16:15.797 回答
3

以 开头的路径\总是相对于当前驱动器的根目录。如果当前驱动是C:,那么\settings\settings.cfg意味着C:\settings\settings.cfg

请注意,您可以使用/以避免转义所有内容。所以你可以使用:settings/settings.cfg。这将相对于用户的当前目录。但是请注意,这不一定与可执行文件所在的目录相对应。如果您需要可执行文件的目录,则需要使用 Windows API 函数来获取它:

#include <Windows.h>
// ...

HMODULE module = GetModuleHandleW(NULL);
WCHAR path[MAX_PATH];
GetModuleFileNameW(module, path, MAX_PATH);

现在,如果要settings/settings.cfg相对于可执行文件的目录打开,请创建一个以它开头并附path加到/settings/settings.cfg它的路径。

于 2013-11-04T03:16:35.957 回答