C++将一个路径下的所有文件完全拷贝到另外一个路径下
时间: 2024-09-07 11:04:45 浏览: 25
在C++中,要实现将一个路径下的所有文件完全拷贝到另外一个路径下,可以使用标准库中的`<filesystem>`头文件,它在C++17标准中被引入。下面是一个简单的示例代码,演示了如何使用`std::filesystem`命名空间中的函数来完成这项任务:
```cpp
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
void copy_all_files(const fs::path& source_path, const fs::path& destination_path) {
try {
// 检查源路径是否存在以及是否为目录
if (fs::exists(source_path) && fs::is_directory(source_path)) {
// 检查目标路径是否存在,如果不存在则创建
if (!fs::exists(destination_path)) {
fs::create_directories(destination_path);
}
// 遍历源路径中的所有项
for (const auto& entry : fs::directory_iterator(source_path)) {
const auto& source_file = entry.path();
auto destination_file = destination_path / source_file.filename();
// 如果是目录则递归拷贝,如果是文件则直接拷贝
if (fs::is_directory(source_file)) {
copy_all_files(source_file, destination_file);
} else {
fs::copy(source_file, destination_file, fs::copy_options::overwrite_existing);
}
}
} else {
std::cerr << "源路径不存在或不是一个目录。" << std::endl;
}
} catch (const fs::filesystem_error& e) {
std::cerr << e.what() << std::endl;
}
}
int main() {
// 示例:将当前目录下的所有文件拷贝到指定目录
fs::path source = "./source_directory";
fs::path destination = "./destination_directory";
copy_all_files(source, destination);
return 0;
}
```
这段代码定义了一个`copy_all_files`函数,它接受源路径和目标路径两个参数,递归地遍历源路径下的所有文件和目录,并将它们拷贝到目标路径。如果目标路径不存在,会尝试创建它。如果在拷贝过程中遇到任何问题,会捕获异常并输出错误信息。
需要注意的是,这段代码需要编译器支持C++17标准,并且在编译时需要开启C++17支持(例如使用`-std=c++17`编译选项)。