1

配置

  • macOS:10.15.5
  • 代码:11.5
  • 铿锵声: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/]

ISSUE
这里的数据文件夹是由我手动或自动创建的。将在其中生成随机文件(子目录文件),我需要所有这些文件的路径和名称。

附加信息
此代码工作得很好

#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");
}
4

1 回答 1

0

我看到三个选项:

  1. 在 XCode 中,转到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

于 2020-07-10T10:40:22.050 回答