打开文件的C++ ifstream

5

我遇到了ifstream打开函数的问题。我在NetBeans下创建了一个Linux应用程序。 我的代码如下:

ifstream file;
file.open(path);
file.is_open()
.
.
.

问题出在路径上。当我使用~/Desktop/file.txt并运行应用程序时,文件无法打开。但是当我调试该应用程序时,一切正常。 对于这个问题有什么提示吗? 谢谢。
1个回答

6

路径名 ~/Desktop/file.txt 不会匹配任何文件,除非它已经扩展了波浪号字符(~),这通常是在将其传递给程序之前由 shell 完成的。 如果您直接调用它,则需要使用完整的路径名。

/home/user/Desktop/file.txt

或者相对路径
./Desktop/file.txt

我猜测调试器在将文件名传递给程序之前,会将其展开以帮助你。

./Desktop/file.txt不起作用。但它也必须与~一起工作。 - JuP
这在很大程度上取决于您如何调用命令,以及从哪个目录开始。 - Julian
2
正确的目录用于 ~ 是在环境变量 HOME 中,通过 getenv("HOME") 获得。因此,如果您获得的文件名以 ~/ 开头,则只需将波浪号替换为 HOME 的内容,以获取绝对路径。但请注意,您通常不应该对从命令行获得的文件名执行此操作,因为它们应该由 shell 展开波浪号。 - celtschk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接