Добавление для повышения:: файловая система:: путь

У меня есть определенное 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 хочет два InputIterators.

Мое решение до сих пор состоит в том, чтобы сделать следующее:

boost::filesystem::path p2(std::string(p.string()).append(".foo"));

Я пропускаю что-то?

32
задан Zack 7 March 2010 в 14:20
поделиться

2 ответа

#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 именем файла, если это не так.

31
ответ дан 27 November 2019 в 19:52
поделиться

Если вы хотите изменить только расширение имени файла, то, вероятно, лучше написать:

p.replace_extension(".foo");

Для большинства других операций с путями к файлам вы можете использовать операторы /= и /, позволяющие объединять части имени. Например,

boost::filesystem::path p("c:\\dir");
p /= "subdir";

будет ссылаться на c:\dir\subdir.

61
ответ дан 27 November 2019 в 19:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: