C ++ Копировать каталог рекурсивно под Unix

Нет примеров готовых к использованию функций на c++ without additional libs Копировать рекурсивные файлы и папки на новое место.

Некоторая альтернатива system("cp -R -f dir"); вызов.

Я только нашел это Рекурсивное копирование каталогов в C Пример ответа в ветке, но он не готов к использованию, и я не уверен, что этот пример правильный для начала.

Может быть, у кого-нибудь есть рабочий пример на диске?

3

Решение

Вот полный пример выполнения рекурсивного копирования с использованием функций POSIX и стандартной библиотеки.

#include <string>
#include <fstream>

#include <ftw.h>
#include <sys/stat.h>

const char* src_root ="foo/";
std::string dst_root ="foo2/";
constexpr int ftw_max_fd = 20; // I don't know appropriate value for this

extern "C" int copy_file(const char*, const struct stat, int);

int copy_file(const char* src_path, const struct stat* sb, int typeflag) {
std::string dst_path = dst_root + src_path;
switch(typeflag) {
case FTW_D:
mkdir(dst_path.c_str(), sb->st_mode);
break;
case FTW_F:
std::ifstream  src(src_path, std::ios::binary);
std::ofstream  dst(dst_path, std::ios::binary);
dst << src.rdbuf();
}
return 0;
}

int main() {
ftw(src_root, copy_file, ftw_max_fd);
}

Обратите внимание, что обычное копирование файла с использованием стандартной библиотеки не копирует режим исходного файла. Это также глубокие копии ссылок. Возможно, возможно также игнорировать некоторые детали, которые я не упомянул. Используйте специальные функции POSIX, если вам нужно обрабатывать их по-разному.

Вместо этого я рекомендую использовать Boost, потому что он переносим на системы, отличные от POSIX, и потому что на нем будет основан новый стандартный API файловой системы c ++.

3

Другие решения

Стандарт C ++ не имеет понятия каталога, только файлы. Для того, что вы хотите сделать, вы должны просто использовать Повысить файловую систему. Это стоит узнать. В противном случае вы можете делать зависящие от ОС вызовы из своего приложения C ++.

Смотрите также эту тему:

Как вы рекурсивно просматриваете каждый файл / каталог в стандартном C ++?

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector