в чем ошибка filesystem::exists

#include <iostream>
#include <vector>
#include <windows.h>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
    setlocale(0, "ru");
    std::string path = "SteamLibrary\\steamapps\\common\\GarrysMod\\garrysmod\\addons";
    fs::path folder;
    std::vector<char> buffer(GetLogicalDriveStringsA(0, NULL));
    GetLogicalDriveStringsA(buffer.size(), buffer.data());
    const char* drive = buffer.data();
    for (; *drive; drive += strlen(drive) + 1) {
        folder = drive + path;
        if (fs::exists(folder.c_str())) { // тут ошибка когда путь доходит до диска E(вторая итерация)
            std::cout << folder << "Есть" << std::endl;
            Sleep(1000);
        }
    }
}

Возникло необработанное исключение по адресу 0x00007FF938CF4F69 в cssloader.exe: исключение Microsoft C++: std::filesystem::filesystem_error по адресу памяти 0x00000069CB14F590.


Ответы (1 шт):

Автор решения: αλεχολυτ

У большинства функций из std::filesystem есть версии без генерации исключений. Можно использовать их и проверять код ошибки, например, версия номер 3.

bool exists( const std::filesystem::path& p, std::error_code& ec ) noexcept;

Иначе стоит добавить блок обработки исключения и диагностировать ошибку в нём. Например:

try {
   for (...) {
   // ...
        if (fs::exists(folder.c_str())) 
   // ...
}
catch (std::exception& e) {
   std::cout << e.what();
}
→ Ссылка