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

您好,我目前有一个程序,它获取一个文件位置的完整路径,并将其放入一个变量,该变量的类型为: ost: : filesystem2: : path

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

string result1 = boost::filesystem::basename (myPath)

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

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

String & string () : 这个例程返回初始化路径的字符串的副本,并根据路径语法规则进行格式设置。

(找到 给你)

我试过了:

string result1 = string& (myPath);

还有其他一些变化。

97045 次浏览

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

我相信你需要做的不仅仅是把路径转换成一个字符串——你应该首先获得路径的规范版本——一个没有符号链接元素的绝对路径——然后把 那个转换成一个字符串:

boost::filesystem::canonical(myPath).string();

附注: 我已经用 Boost 编程很多年了,在文档中很难找到这些信息。


最新情况(2017年10月)

文件: 文件系统: : 规范

但是请注意,在 C + + 17中有 文件系统,还有 规范等等。

这在 wxWidgets 中是可行的: (我知道我应该只使用 wx 实用程序 但这是一个考验)

void WxWidgetsBoostTestFrame::OnTestBtnClick(wxCommandEvent& event)
{
boost::filesystem::path currentPath;
currentPath = boost::filesystem::current_path();
std::string curDirString;
curDirString = boost::filesystem::canonical(currentPath).string();
wxString mystring(curDirString.c_str(), wxConvUTF8);
wxMessageBox(mystring); // output:  C:/Users\client\Desktop...
}

调用 myPath.generic_string()将做你需要的。

这样做

Path.c _ str () ;

你会没事的。

就我个人而言,我必须这么做

boost::filesystem::absolute(path).string()

让它发挥作用,比如:

path.string()

不断返回相对路径。