C++遍历文件夹:安全读取所有文件(含异常处理)
C++遍历文件夹:安全读取所有文件(含异常处理)
使用C++的std::ifstream无法直接打开和读取文件夹内的所有文件,因为它只能处理单个文件。你需要借助操作系统提供的文件系统功能,例如文件系统库或系统API。
本文将介绍如何使用C++17的文件系统库(<filesystem>)来实现此功能,并演示如何进行异常处理以增强代码的健壮性。cpp#include
namespace fs = std::filesystem; // 使用别名简化代码
void readFilesInFolder(const std::string& folderPath) { try { fs::directory_iterator end; // 迭代器结束标记
// 遍历文件夹内的所有条目 for (fs::directory_iterator iter(folderPath); iter != end; ++iter) { // 使用 is_regular_file 判断是否为常规文件 if (fs::is_regular_file(iter->status())) { std::string filePath = iter->path().string(); // 在此处添加你的文件处理逻辑 std::cout << 'File: ' << filePath << std::endl; } } } catch (const std::exception& ex) { std::cerr << 'Error: ' << ex.what() << std::endl; }}
int main() { std::string folderPath = '/path/to/folder'; // 替换为实际的文件夹路径 readFilesInFolder(folderPath);
return 0;}
代码解析:
-
包含头文件: -
<iostream>: 用于输入输出操作。 -<filesystem>: 提供C++17文件系统库功能。 -
命名空间别名: -
namespace fs = std::filesystem;使用fs别名来简化代码。 -
readFilesInFolder函数: - 接收文件夹路径作为参数 (folderPath)。 - 使用try-catch块进行异常处理,捕获可能发生的错误。 -fs::directory_iterator: 用于迭代文件夹内的所有条目。 -fs::is_regular_file: 判断条目是否为常规文件。 - 循环内部可以添加你自己的文件处理逻辑。 -
main函数: - 设置目标文件夹路径 (folderPath),记得替换为你的实际路径。 - 调用readFilesInFolder函数开始处理文件。
总结:
通过使用 C++17 的 <filesystem> 库,你可以轻松地读取文件夹中的所有文件。记住进行异常处理,以防止程序因意外错误而崩溃,并根据实际需求修改代码中的文件处理部分。
原文地址: https://www.cveoy.top/t/topic/udu 著作权归作者所有。请勿转载和采集!