У меня есть определенное 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"));
Я пропускаю что-то?
#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, но лист и remove_leaf также описаны в 1.35 . Вам нужно будет сначала проверить, является ли последний компонент p именем файла, если это не так.
Если вы хотите изменить только расширение имени файла, то, вероятно, лучше написать:
p.replace_extension(".foo");
Для большинства других операций с путями к файлам вы можете использовать операторы /=
и /
, позволяющие объединять части имени. Например,
boost::filesystem::path p("c:\\dir");
p /= "subdir";
будет ссылаться на c:\dir\subdir
.