我如何在 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;
}
我想用 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;
}