gpt4 book ai didi

C++ unix下递归复制目录

转载 作者:太空狗 更新时间:2023-10-29 20:36:59 26 4
gpt4 key购买 nike

没有任何示例可以在 c++ 上使用而无需额外的库 来将递归文件和文件夹复制到新位置。

system("cp -R -f dir"); 调用的替代方法。

我只找到这个 Recursive directory copying in C线程答案上的示例,但它还没有准备好使用,我不确定这个示例是否正确开始。

也许有人在磁盘上有工作示例?

最佳答案

这是一个使用 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 系统,而且新的 c++ 标准文件系统 API 将基于它。

关于C++ unix下递归复制目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36428121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com