2015-11-29 2 views
2

У меня есть файл в моем домашнем каталоге:Получение абсолютный путь к ускорению

~/abc.csv 

Я хочу, чтобы получить полный абсолютный путь, который был бы:

/home/nishant/abs.csv 

Как я могу получить его?

Я думал, что канонический поможет, но для канонической работы файл должен exists, а функция exists на ~/abc.csv возвращает false.

ответ

2

Это не делает путь абсолютным и не делает его каноническим.

Это расширение оболочки символа ~. И это не особенность в Boost Filesystem, как таковая.

Вы можете закодировать сами:

Live On Coliru

#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"; 
} 

Что, на моей системе печатает "/home/sehe/test.cpp"

+0

спасибо очень много .. .. Я думал, что расширение будет обработано Boost в случае Linux OS –