如何将boost路径类型转换为字符串?

Joh*_*ton 123 c++ boost path

你好,我目前有一个程序,它获取文件位置的完整路径,并被放入一个变量类型:boost :: filesystem2 :: path

我已经查找了如何做到这一点,并发现使用:

string result1 = boost::filesystem::basename (myPath)
Run Code Online (Sandbox Code Playgroud)

将路径转换为字符串但它只转换文件名(例如,如果路径为"C:\name\bobsAwesomeWordDoc.docx",则只返回"bobsAwesomeWordDoc").

我已经找到了如何将整个路径转换为字符串的以下内容,但我不知道如何在我的程序中实现它.我尝试了多种方法但是我遇到了转换错误.

const std :: string&string():此例程返回初始化路径的字符串的副本,并根据路径语法规则进行格式化.

(在这里找到)

我试过了:

string result1 = string& (myPath);
Run Code Online (Sandbox Code Playgroud)

以及其他一些变化.

ice*_*ime 154

你只需要打电话myPath.string().


res*_*ned 11

我相信你需要做多一点不仅仅是转换路径为一个字符串-你应该首先获得该路径的规范版本-无符号链接元素的绝对路径-并转换为一个字符串:

boost::filesystem::canonical(myPath).string();
Run Code Online (Sandbox Code Playgroud)

PS - 我已经使用Boost进行了多年的编程,我无法在文档中轻松找到这些信息.


更新(2017年10月)

文档:boost :: filesystem :: canonical.

但请注意,从C++ 17开始,有std :: filesystem,具有规范性和更多功能.

  • 在较新版本的Boost中不推荐使用canonical http://www.boost.org/doc/libs/1_48_0/libs/filesystem/v3/doc/deprecated.html (4认同)
  • @BrianJack,您的第二个链接已弃用了“ canonize”,但是[`canonical`](http://www.boost.org/doc/libs/1_48_0/libs/filesystem/v3/doc/reference。 html#canonical)似乎不是(对于您的第一个链接,对于1_48 V3)。现在在C ++ 17中,我们当然有了[`std :: filesystem`](http://en.cppreference.com/w/cpp/filesystem) (2认同)