在Unix上使用C++打开文件

8

我正在尝试在 C++ 中打开一个文件,而程序运行的服务器是基于 Tux 的。

string filename = "../dir/input.txt"; works but
string filename = "~jal/dir1/dir/input.txt"; fails

如果提供的文件名是第二种格式,有没有办法在C++中打开文件?

3个回答

12

~jal 的扩展是由 shell (bash/csh/whatever) 执行的,而不是系统本身执行的,因此您的程序试图查看名为 ~jal/ 而不是 /home/jal/ 的文件夹。

我不是 C 语言编程人员,但可能你需要使用 getpwent() 函数。


我的意思是我说的,而不是问题的发布者。 - ojblass
Magnus,$HOME 包含 你的 用户目录 - 而 ~jal 扩展为用户“jal”的用户目录。 - user1686
2Magnus: 如果程序通过'su'运行,我不确定$HOME是否有效。 - Alex Ott
你几乎是正确的,你只省略了一个符号 /,应该像这样: "/jal/dir1/dir/input.txt" 而不是 "jal/dir1/dir/input.txt"。 - Tebe

9
您可以扫描字符串,将~user替换为适当的目录。 POSIX函数wordexp可以完成此操作,还有其他一些功能:
  • 变量替换,例如可以使用$HOME
  • 可选命令替换,例如$(echo foo)(可禁用)
  • 算术扩展,例如$((3+4))
  • 单词拆分,例如将~/a ~/b拆分成两个单词
  • 通配符扩展,例如*.cpp
  • 以及引用,例如"~/a ~/b"保持不变

3

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