我如何在 C++ 中描述文件的绝对路径?

How do I have to describe an absolute path to a file in C++?

我想用 C++ 编写一个程序,当它被执行时(从任何地方),修改一个非常特定路径(并且总是相同的路径)中的文本文件。为此,我在 C++ 中定义了以下函数:

void ChangeCourse(string course)
{
    ofstream active_course;
    active_course.open("~/.universidad/curso_activo.txt");

    if (!curso_activo)
        cout << "Error: cant't open the file" << endl;
    else
    {
        active_course << course;
        curso_activo.close();
    }
}

在执行调用该函数的程序时,我收到消息 Error: cant't open the file,实际上没有创建任何文件。

我必须如何定义文件的路径,以便程序可以读取并找到它,而不管程序在哪里被调用。

请注意,我是 运行 macOS 中的程序。

希望我已经解释清楚了,提前谢谢你。

~ 由 shell(也就是说,由命令行解释器)扩展(到您的主目录)。它不是 *nix API 本身的一部分。 (macOS 基于 BSD Unix。)

相反,您可以使用 getenv() 扩展 HOME 环境变量,并在打开它之前附加路径的其余部分(包括文件名)。

除非你要找的file/folder在程序运行所在的当前目录下,你必须传入绝对文件路径。

在 macOS 中,您应该能够 select 您想要打开的文件,然后按 cmd+i 找到文件的绝对路径。

您不能像在命令 shell.

中那样使用 ~/. 来引用用户的主目录

您需要指定完整路径,例如/home/zjanny/test.txt

在 C++17 中,您可以使用文件系统库并对路径进行硬编码,如果这是您真正想要做的。

#include <filesystem>
#include <fstream>

namespace fs=std::filesystem;

int main() {

  fs::path p = "your-absolute-path-goes-here"; // 
  if(fs::exists(p)) {
    std::ofstream file(p);
    file << "Hello world!" << "\n";
  }
  return 0;  
}