【问题标题】:C++ paths beginning with ~ [duplicate]以〜开头的C ++路径[重复]
【发布时间】:2016-02-06 06:17:15
【问题描述】:

这里有没有可能在 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;
}

【问题讨论】:

  • 您的工作目录中是否有一个名为~ 的目录?在不存在的目录中打开文件不会自动为您创建目录。例如。 mkdir \~.

标签: c++ path tilde


【解决方案1】:

我猜你是在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-28
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 2017-06-09
    • 1970-01-01
    相关资源
    最近更新 更多