в чем ошибка 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();
}