打开当前目录下的文件

0 c++ directory file

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

我当前的代码看起来像:

ifstream myfile;
myfile.open("c:\\client\\settings.cfg");
Run Code Online (Sandbox Code Playgroud)

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

ifstream myfile;
myfile.open("\\settings\\settings.cfg");
Run Code Online (Sandbox Code Playgroud)

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

文件结构如下所示:

[ART]
  asset.png
[SETTINGS]
  settings.cfg
client.exe
Run Code Online (Sandbox Code Playgroud)

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

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

Zac*_*and 5

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

ifstream myfile;
myfile.open("settings\\settings.cfg");
//           ^^ Note the lack of \\ to start the file path
Run Code Online (Sandbox Code Playgroud)

  • @ user2827019 正如我在回答中提到的,这与可执行文件的目录无关。它仅相对于用户的当前目录。如果用户从其目录中启动可执行文件,它只会匹配可执行文件的目录。 (2认同)