Есть ли в boost::filesystem
функция расширения путей, которые начинаются с символа домашнего каталога пользователя (~
в Unix), аналогично os.path.expanduser, представленная в Python?
Расширение пользовательского пути с помощью boost :: filesystem
Ответы (1)
Нет.
Но вы можете реализовать это, сделав что-то вроде этого:
namespace bfs = boost::filesystem;
using std;
bfs::path expand (bfs::path in) {
if (in.size () < 1) return in;
const char * home = getenv ("HOME");
if (home == NULL) {
cerr << "error: HOME variable not set." << endl;
throw std::invalid_argument ("error: HOME environment variable not set.");
}
string s = in.c_str ();
if (s[0] == '~') {
s = string(home) + s.substr (1, s.size () - 1);
return bfs::path (s);
} else {
return in;
}
}
Также ознакомьтесь с предлагаемым аналогичным вопросом. пользователя @WhiteViking.
person
gauteh
schedule
16.02.2017
Обратите внимание, что это не кроссплатформенный подход и работа не гарантируется: stackoverflow.com/a/3733955/6296561
- person Zoe; 01.05.2020
На самом деле это совершенно неправильно. Например, если вы вошли в систему как пользователь admin, он расширит ~ celmin / some / path до / home / admin / celmin / some / path вместо правильного / home / celmin / some / path. Даже если вы не хотите обрабатывать расширение каталога другого пользователя, вам, вероятно, следует хотя бы проверить, что вторым символом является /. (Также, как уже упоминалось, это работает только на платформах POSIX.)
- person celticminstrel; 24.02.2021
canonical(path("~/test.txt"))
, но это не сработало. Неправильное использование? - person Daniel   schedule 20.10.2015