使我的catch语句恢复我的代码:使用文件系统迭代目录

问题描述 投票:0回答:1

我已经完成了当前代码,该代码将遍历C驱动器中的所有目录,子目录和文件。这是我的代码:

try
{
    for (auto& p : fs::recursive_directory_iterator(path))
    {



        fs::path pathp = p.path();


        std::cout << pathp << '\n';
    }
}
catch (std::exception & ex)
{


    std::cout << "Error - " << ex.what() << "\n";
    system("PAUSE");

因此,当前的操作是当他们出现错误时,它将捕获该错误。但是随后程序完全停止执行。前2个错误是文件/目录中的uni-code,或者它无权访问某些目录(例如Intel)。我的程序在管理员权限下运行。有没有办法使我可以跳过错误所在的目录并继续执行代码?感谢帮助!谢谢!

c++ error-handling filesystems try-catch c++17
1个回答
0
投票

您可以通过使用recursive_directory_iterator对象构造std::error_code并进行测试以检测任何错误来避免使用异常。

std::error_code ec;

for(auto p: fs::recursive_directory_iterator(path, ec))
{
    if(ec)
    {
        std::cout << "Error - " << ec.message() << "\n";
        continue;
    }

    std::cout << p << '\n';
}

手册中对各种构造函数选项进行了描述:https://en.cppreference.com/w/cpp/filesystem/recursive_directory_iterator/recursive_directory_iterator

© www.soinside.com 2019 - 2024. All rights reserved.