不使用filesystem的C++遍历相对文件夹删除指定后缀文件
时间: 2024-09-27 19:09:37 浏览: 42
在C++中,通常会使用标准库中的`<filesystem>`模块来操作文件系统,包括遍历文件夹和删除文件。然而,如果想要避免直接依赖这个模块并简化示例,可以使用递归函数结合`<iostream>`和字符串处理。这里是一个基本的示例,展示如何遍历当前目录及其子目录,查找并删除所有指定后缀名的文件,假设我们不使用`<filesystem>`:
```cpp
#include <iostream>
#include <string>
#include <vector>
void delete_files_with_extension(const std::string& directory, const std::string& extension) {
struct File {
bool is_directory;
std::string path;
};
void traverse(const std::string& current_path) {
for (const auto& entry : list_directory(current_path)) { // 假设list_directory是自定义函数返回文件和目录列表
if (entry.is_directory) {
traverse(entry.path);
} else {
if (has_extension(entry.path, extension)) { // 假设has_extension检查文件是否包含指定后缀
remove_file(entry.path); // 假设remove_file是自定义函数用于删除文件
std::cout << "Deleted file: " << entry.path << std::endl;
}
}
}
}
traverse(directory);
}
bool has_extension(const std::string& path, const std::string& extension) {
return path.find_last_of(".") != std::string::npos && path.substr(path.find_last_of(".") + 1) == extension;
}
// 自定义函数,模拟列出目录内容
std::vector<File> list_directory(const std::string& dir_path) {
// 这里只是一个简单的例子,实际需要实现从给定路径读取并解析目录信息
std::vector<File> files;
files.push_back({true, "dir1"});
files.push_back({false, "file.txt"});
files.push_back({true, "dir2"});
// ... 更多目录和文件数据
return files;
}
// 自定义函数,模拟删除文件
void remove_file(const std::string& file_path) {
// 这里只是一个简单示例,实际应用中需要处理异常
std::cerr << "Deleting file: " << file_path << std::endl; // 删除操作
}
int main() {
delete_files_with_extension(".", ".txt"); // 遍历当前目录删除.txt文件
return 0;
}
```
请注意,这个示例仅作为教学目的,实际应用中你需要处理文件I/O、错误处理以及真实地读取目录信息,而不是像现在这样硬编码数据。
阅读全文