Добавление в boost:: filesystem:: path
У меня есть определенный boost::filesystem::path
в руке, и я хотел бы добавить к нему строку (или путь).
boost::filesystem::path p("c:\\dir");
p.append(".foo"); // should result in p pointing to c:\dir.foo
Единственная перегрузка boost::filesystem::path
имеет append
, которая хочет два InputIterator
s.
Мое решение до сих пор заключается в следующем:
boost::filesystem::path p2(std::string(p.string()).append(".foo"));
Я что-то пропустил?
Ответы
Ответ 1
#include <iostream>
#include <string>
#include <boost/filesystem.hpp>
int main() {
boost::filesystem::path p (__FILE__);
std::string new_filename = p.leaf() + ".foo";
p.remove_leaf() /= new_filename;
std::cout << p << '\n';
return 0;
}
Протестировано с 1.37, но leaf и remove_leaf также задокументированы в 1.35. Вам нужно будет проверить, будет ли последний компонент p первым именем файла, если это может быть не так.
Ответ 2
Если это действительно просто расширение имени файла, которое вы хотите изменить, вам, вероятно, лучше писать:
p.replace_extension(".foo");
для большинства других операций с файловыми путями вы можете использовать операторы /=
и /
, позволяющие объединять части имени. Например,
boost::filesystem::path p("c:\\dir");
p /= "subdir";
будет ссылаться на c:\dir\subdir
.
Ответ 3
С версией 3 библиотеки Filesytem (Boost 1.55.0) это так же просто, как просто
boost::filesystem::path p("one_path");
p += "_and_another_one";
что приводит к p = "one_path_and_another_one"
.
Ответ 4
path p;
std::string st = "yoo";
p /= st + ".foo";