您好我目前有一个程序可以获取文件位置的完整路径,并被放入一个变量类型:boost :: filesystem2 :: path
我已经查找了如何执行此操作并找到了使用:
string result1 = boost::filesystem::basename (myPath)
将路径转换为字符串但它只转换文件名(例如,如果路径为“C:\ name \ bobsAwesomeWordDoc.docx”,则只返回“bobsAwesomeWordDoc”)。
我发现了如何将整个路径转换为字符串, 但我不知道如何在我的程序中实现它。我尝试了多种方法,但是我遇到了转换错误。
const std :: string& string():此例程返回初始化路径的字符串的副本,并根据路径语法规则进行格式化。
(找到here)
我试过了:
string result1 = string& (myPath);
以及其他一些变化。
答案 0 :(得分:142)
您只需致电myPath.string()
。
答案 1 :(得分:10)
我相信你需要做的不仅仅是将路径转换为字符串 - 你应该首先获得路径的规范版本 - 没有符号链接元素的绝对路径 - 并转换 成为一个字符串:
boost::filesystem::canonical(myPath).string();
P.S。 - 我已经使用Boost进行了多年的编程,我无法在文档中轻松找到这些信息。
更新(2017年10月)
文档:boost::filesystem::canonical。
但请注意,从C ++ 17开始,有std::filesystem,canonical等等。
答案 2 :(得分:3)
这在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...
}
答案 3 :(得分:1)
致电myPath.generic_string()
将满足您的需求。
答案 4 :(得分:0)
这样做
path.c_str();
你应该没事。
答案 5 :(得分:0)
我个人必须这样做
boost::filesystem::absolute(path).string()
让它工作,如:
path.string()
一直返回相对路径。