Подтвердить что ты не робот

Добавление в 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"));

Я что-то пропустил?

4b9b3361

Ответ 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";