C++ fstream open

C++ fstream open

本文关键字:open fstream C++      更新时间:2023-10-16

我能够创建文件,例如

f.open("file")
f.open("./path/file")
f.open("../path/file")

但不是

f.open("~/path...)
f.open("/path...)

如何获得绝对路径的工作?

默认情况下,std::fstream::open(filename)打开输入和输出的filename。因此,该文件必须存在,并且您必须具有写入权限。

在您的情况下:

f.open("file")
f.open("./path/file")
f.open("../path/file")

你很幸运。

在您的情况下:

f.open("~/path...")

您使用了路径元素~,这意味着$HOME在外壳中,但只是表示~ C++。

在这种情况下:

f.open("/path...")

很不幸:要么文件不存在,要么你没有写入权限。

如果您只想打开文件进行输入,则:

  • 使用std::ifstream
  • 使用std::fstream f; f.open(filename,std::ios_base::in);

如果您只想打开文件进行输出,则:

  • 使用std::ofstream
  • 使用std::fstream f; f.open(filename,std::ios_base::out);

有了f.open("~/path/...."),你有必要在代码中展开~。 这通常是通过调用 getenv("HOME") 来检索主目录,并将路径中出现的每个'~'替换为主目录来完成的。

使用绝对路径(如 "/path/whatever" )时,您需要检查f.open()是否成功。 f.open()可能失败的原因有多种,包括访问控制(阻止打开文件的保护措施)、文件已被另一个进程打开、目录不存在等。

值得注意的是,f.open() 在尝试打开目录中的文件时,要求路径中的所有目录都已存在。 它不会施展一些魔法来使它们存在。 如果你想要它,你需要编码它。 请记住,每个阶段(创建目录等)都可能失败。