C++ unix下递归复制目录
C++ Copy directory recursive under unix
没有任何可用于 c++ without additional libs
的函数示例,用于将递归文件和文件夹复制到新位置。
system("cp -R -f dir");
调用的一些替代方法。
我只在线程答案中找到了这个 Recursive directory copying in C 示例,但它还没有准备好使用,我不确定这个示例是否正确。
也许有人在磁盘上有工作示例?
标准C++没有目录的概念,只有文件。对于您想做的事情,您应该只使用 Boost Filesystem。值得了解。否则,您可以从 C++ 应用程序进行 OS 相关调用。
另请参阅此 SO 线程:
How do you iterate through every file/directory recursively in standard 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++ without additional libs
的函数示例,用于将递归文件和文件夹复制到新位置。
system("cp -R -f dir");
调用的一些替代方法。
我只在线程答案中找到了这个 Recursive directory copying in C 示例,但它还没有准备好使用,我不确定这个示例是否正确。
也许有人在磁盘上有工作示例?
标准C++没有目录的概念,只有文件。对于您想做的事情,您应该只使用 Boost Filesystem。值得了解。否则,您可以从 C++ 应用程序进行 OS 相关调用。
另请参阅此 SO 线程:
How do you iterate through every file/directory recursively in standard 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 将基于它。