如何从std :: filesystem :: path中删除引号

时间:2017-04-27 13:41:19

标签: c++ c++17 std-filesystem

如果我使用像absolute()这样的函数,我总会得到一个包含引号的路径。

文件系统函数中是否有一种方法可以删除此引号,使其能够使用例如的std :: ifstream的?

  fs::path p2 { "./test/hallo.txt" };
  std::cout << "absolte to file : " << fs::absolute(p2) << std::endl;

返回:

"/home/bla/blub/./test/hallo.txt"

我需要

/home/bla/blub/./test/hallo.txt

代替。

手动执行是没有问题的,但我想询问文件系统库中是否有方法。

1 个答案:

答案 0 :(得分:7)

std::operator << (std::filesystem::path const &)指定如下:

  

在路径p上执行流输入或输出。使用std::quoted以便在以后由流输入操作符读取空格时不会截断[sic]。

因此,这是流式传输路径时的预期行为。你需要的是path::string()

  

以本机路径名格式返回内部路径名,并转换为特定的字符串类型。

std::cout << "absolte to file : " << absolute(p2).string() << std::endl;
//                                               ^^^^^^^^^

我还删除了fs::,因为可以通过ADL找到absolute