c++ - C++ 17 filesystem::recursive_directory_iterator()在Mac上没有此类目录给出错误但在Windows上有效

标签 c++ xcode clang c++17 std-filesystem

配置

  • macOS:10.15.5
  • xcode:11.5
  • clang :11.0.3
  • 项目设置为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");
    }
    

    最佳答案

    我看到三个选择:

  • 在XCode中,转到Product-Scheme-Edit Scheme,然后在左列中选择Run目标,切换到Options并使用Working directory指向要在其中运行目标可执行文件的目录。这是您的data目录必须存在的位置,程序才能成功运行。
  • 找出XCode正在使用的实际工作目录。在此处创建data目录。
  • 指定一个绝对路径,如
    for(const auto& p: fs::recursive_directory_iterator("/my/absolute/path/data/"))
    

  • 与您发布的工作片段的不同之处在于,它相对于XCode的工作目录创建了一个新目录。与data旁边的手动创建的main.cpp目录相反,显然可以找到该目录。

    关于c++ - C++ 17 filesystem::recursive_directory_iterator()在Mac上没有此类目录给出错误但在Windows上有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62832280/

    相关文章:

    c++ - Windows GetDIBits 不返回预期值

    c++ - 什么是 C/C++ for Windows 中基于共享内存的轻量级 IPC 机制?

    c++ - 如何在 Google Compute Engine 上编译 C++ 程序

    xcode - 由于未跟踪的工作树文件导致 git branch checkout 出现问题

    ios - 用于从 iTunes 传输到设备的 Ad-Hoc 构建的正确代码签名配置是什么?

    c - GCC 可以编译,但 clang 不会

    在 Linux Alpine 下构建 llvm 6

    eclipse-cdt - 如何将 clang/llvm 与 Eclipse CDT 结合使用

    c++ - 遍历动态分配的矩阵

    xcode - MacOS 应用程序无法在 Xcode 模拟器上运行