c++不使用filesystem实现复制文件夹及子目录文件
时间: 2024-09-12 20:16:27 浏览: 41
c++遍历文件夹及其子文件夹所有文件 并输出文件路径和文件内容
5星 · 资源好评率100%
在C++中,你可以使用C风格的文件处理函数和递归算法来复制整个文件夹及其子目录。这里是一个简单的示例,展示了如何使用`std::ifstream`、`std::ofstream`以及递归来遍历和复制文件和目录:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <filesystem>
void copyDirectory(const std::string& src, const std::string& dst) {
// 检查src是否有效
if (!std::filesystem::exists(src)) {
std::cerr << "Source directory does not exist.\n";
return;
}
for (const auto & entry : std::filesystem::directory_iterator(src)) {
if (entry.is_directory()) { // 子目录
copyDirectory(entry.path(), dst + entry.path().filename() + "/");
} else { // 文件
std::string destPath = dst + entry.path().relative_path();
try {
std::copy(entry.begin(), entry.end(), std::fstream(destPath, std::ios::binary));
std::cout << "Copied file: " << destPath << '\n';
}
catch (const std::exception &e) {
std::cerr << "Error copying file: " << e.what() << '\n';
}
}
}
}
int main() {
std::string srcDir = "/path/to/source/directory";
std::string dstDir = "/path/to/destination/directory";
try {
copyDirectory(srcDir, dstDir);
}
catch (const std::filesystem::filesystem_error &e) {
std::cerr << "Error during directory copy: " << e.what() << '\n';
}
return 0;
}
```
这个代码首先检查源目录是否存在,然后遍历目录中的每个条目。如果是目录,则递归地复制;如果是文件,则打开目标文件并逐字节复制内容。注意,这个例子假设目标路径尚未存在,如果你希望覆盖现有目标文件,需要在复制前添加额外的检查。
阅读全文