ошибка библиотеки времени выполнения, которую выдает abort () при использовании recursive_directory_iterator из <filesystem>библиотеки C ++ - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь перечислить все каталоги и файлы с компьютера и хочу работать с DIR и FILES.

Примечание :

Я на Windows платформе. Использование Visual Studio 2019 Community Edition. И к вашему сведению, запускающий скомпилированный двоичный файл от имени администратора из-за проблем с разрешениями на windows. Пожалуйста, запустите от имени администратора, чтобы воспроизвести ошибку.

Здесь я использую recursive_directory_iterator из библиотеки <filesystem>, которая теперь входит в стандарт c ++ 17 .

Вот фрагмент кода c:

#include <iostream>
#include <windows.h>
#include <vector>
#include <filesystem>


namespace fs = std::filesystem;
using namespace std;

string f_path = "E:\\";


void func1(string file_path)
{

    vector<string> my_paths{};

        for (auto& p : fs::recursive_directory_iterator(file_path))
        {
            cout << p.path() << endl;

        }


}


int main()
{


    func1(f_path);
    return 0;


}

Это ошибка, которую выдает этот код.

enter image description here

Я новичок в Cpp и не могу решить эту проблему. Я ценю ваши усилия, что нашли время и помогли мне.

1 Ответ

0 голосов
/ 20 января 2020

Чтобы пропустить ошибки «Отказано в доступе», вы должны использовать альтернативные l oop и std::filesystem::recursive_directory_iterator::increment вместо std::filesystem::recursive_directory_iterator::operator++. Это описано в разделе Исключения std :: filesystem :: recursive_directory_iterator :: operator ++, std :: filesystem :: recursive_directory_iterator :: increment . Что-то вроде ниже (написано без компиляции и тестирования)

void func1(const string& file_path) {
    std::error_code os_error;
    fs::recursive_directory_iterator walker(file_path);
    for (auto i = fs::begin(walker); i != fs::end(walker); i = i.increment(os_error)) {
        if (!os_error)
            std::cout << i->path() << std::endl;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...