c++11复制文件夹及子目录文件
时间: 2024-09-12 21:15:47 浏览: 23
在 C++11 中,处理文件和目录操作通常需要第三方库,因为标准库并不直接支持这样的功能。`std::filesystem` 模块从 C++17 开始引入,但在 C++11 和早期版本中,你可以考虑使用像 `boost.filesystem` 这样的库。
`boost.filesystem` 提供了遍历目录、复制文件等功能。下面是一个使用 Boost.Filesystem 的简单示例,展示如何复制整个文件夹及其子目录:
```cpp
#include <boost/filesystem.hpp>
void copyDirectory(const boost::filesystem::path& src, const boost::filesystem::path& dest)
{
if (!boost::filesystem::exists(src)) {
std::cout << "Source directory does not exist." << std::endl;
return;
}
try {
for (const auto& entry : boost::filesystem::directory_iterator(src)) {
if (entry.is_directory()) {
// 如果是子目录
boost::filesystem::create_directory(dest / entry.path().filename());
copyDirectory(entry.path(), dest / entry.path().filename());
} else {
// 如果是文件
boost::filesystem::copy(entry, dest / entry.path());
std::cout << "Copied file: " << entry.path() << " to " << dest / entry.path() << std::endl;
}
}
} catch (const boost::filesystem::filesystem_error& e) {
std::cerr << "Error copying file/directory: " << e.what() << std::endl;
}
}
int main()
{
boost::filesystem::path src("source_directory");
boost::filesystem::path dest("destination_directory");
if (boost::filesystem::exists(dest)) {
boost::filesystem::remove_all(dest);
}
copyDirectory(src, dest);
return 0;
}
```
这个函数首先检查源目录是否存在,然后递归地遍历每个子目录和文件,创建目标目录并复制文件到相应位置。
注意:在实际应用中,你应该加入错误处理和异常管理机制,以及可能的话,使用异步I/O提高性能。