c ++ 17 filesystem :: recursive_directory_iterator () выдает ошибку, нет такого каталога на ma c, но работает на windows - PullRequest
1 голос
/ 10 июля 2020

Конфигурации

  • macOS: 10.15.5
  • xcode: 11.5
  • clang: 11.0.3
  • Project установлен на c ++ 17

Я новичок в macOS и пытаюсь решить простую проблему ..

#include <iostream>
#include <filesystem>

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

int main(int argc, const char * argv[]) {
    for(const auto& p: fs::recursive_directory_iterator("data/"))
        cout << p.path() << '\n';
    return 0;
}

Этот код дает мне ошибку (пробовал на xcode, clion и cmake) -

uncaught exception of type std::__1::__fs::filesystem::filesystem_error: 
filesystem error: in recursive_directory_iterator: No such file or directory [data/]

ВЫПУСК Здесь папка с данными создается мной вручную или некоторое время автоматически. В нем будут генерироваться случайные файлы (также файлы подкаталогов), мне нужен путь и имя всех этих файлов.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ Этот код отлично работает

#include <fstream>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
 
int main()
{
    fs::create_directories("sandbox/a/b");
    std::ofstream("sandbox/file1.txt");
    fs::create_symlink("a", "sandbox/syma");
    for(auto& p: fs::recursive_directory_iterator("sandbox"))
        std::cout << p.path() << '\n';
    fs::remove_all("sandbox");
}

1 Ответ

0 голосов
/ 10 июля 2020

Я вижу три варианта:

  1. В XCode от go до Product - Scheme - Edit Scheme, затем выберите цель Run в левом столбце , переключитесь на Options и используйте Working directory, чтобы указать каталог, в котором вы хотите запустить целевой исполняемый файл. Здесь ваш каталог data должен существовать для успешного выполнения программы.

  2. Выясните, какой рабочий каталог использует XCode. Создайте там каталог data.

  3. Укажите абсолютный путь, как в

    for(const auto& p: fs::recursive_directory_iterator("/my/absolute/path/data/"))
    

Отличие от рабочего фрагмента, который вы сообщается, что он создает новый каталог относительно рабочего каталога XCode. Который, очевидно, можно найти, в отличие от созданного вручную каталога data рядом с main.cpp.

...