在boost中获得绝对路径

在boost中获得绝对路径,boost,Boost,我的主目录中有一个文件: ~/abc.csv 我想得到完整的绝对路径,即: /home/nishant/abs.csv 我怎么得到它 我认为canonical会有所帮助,但要使canonical发挥作用,文件应该存在,并且~/abc.csv上的存在函数返回false。这并没有使路径成为绝对路径,也没有使其成为规范路径 它是~字符的shell扩展。而且它本身并不是Boost文件系统中的一个特性 您可以自己编写代码: #include <boost/filesystem.hpp>

我的主目录中有一个文件:

~/abc.csv
我想得到完整的绝对路径,即:

/home/nishant/abs.csv
我怎么得到它


我认为canonical会有所帮助,但要使canonical发挥作用,文件应该
存在
,并且
~/abc.csv
上的
存在
函数返回false。

这并没有使路径成为绝对路径,也没有使其成为规范路径

它是
~
字符的shell扩展。而且它本身并不是Boost文件系统中的一个特性

您可以自己编写代码:

#include <boost/filesystem.hpp>
#include <iostream>

using boost::filesystem::path;

path expand(path p) {
    char const* const home = getenv("HOME");
    if (home == nullptr)
        return p; // TODO handle as error?

    auto s = p.generic_string<std::string>();
    if (!s.empty() && s.find("~/") == 0u) {
        return home + s.substr(1);
    }
    return p;
}


int main() {
    path sample = "~/test.cpp";
    std::cout << expand(sample) << "\n";
}
#包括
#包括
使用boost::filesystem::path;
路径扩展(路径p){
char const*const home=getenv(“home”);
if(home==nullptr)
返回p;//TODO句柄为错误?
自动s=p.通用字符串();
如果(!s.empty()&&s.find(“~/”==0u){
回家+s.substr(1);
}
返回p;
}
int main(){
路径示例=“~/test.cpp”;

非常感谢……我以为在linux操作系统的情况下,扩展将由Boost处理