以〜开头的C ++路径

时间:2015-11-05 12:06:48

标签: c++ path tilde

这里是否有可能使用以"〜"开头的路径。在linux中的 c ++ 代码?例如,此代码无法正常工作:

#include <iostream>
#include <fstream>
using namespace std;

int main () 
{
  ofstream myfile;
  myfile.open ("~/example.txt");
  myfile << "Text in file .\n";
  myfile.close();
  return 0;
}

1 个答案:

答案 0 :(得分:6)

我猜你是在Linux或POSIX系统上,有一个了解~的交互式shell(例如bash

实际上,以~开头的文件路径几乎从未发生过(您可以在shell中创建mkdir '~'这样的目录,但这样做会有悖常理)。请记住,您的shell是globbing个参数,因此您的shell (不是您的程序!)正在用替换~,例如在终端中键入/home/martin作为命令时, myprogram ~/example.txt 。见glob(7)。您可能希望在C ++程序中使用glob(3)wordexp(3)(但只有当"~/example.txt"字符串来自某些数据时才需要这样做 - 例如某些配置文件,某些用户输入,等...)

有时,您可能只需使用getenv(3)获取主目录(或getpwuid(3)使用getuid(2))。也许你可能会这样做

std::string home=getenv("HOME");
std::string path= home+"/example.txt";
ofstream myfile(path);

如果您是认真的,则应检查getenv("HOME")是否未返回NULL。在实践中,这不太可能发生。

另见this