c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上

c++ 17 filesystem::recursive_directory_iterator() gives error no such directory on mac but works on windows

本文关键字:windows 但在 迭代器 directory recursive c++17 mac 文件系统      更新时间:2023-10-16

配置

  • macOS:10.15.5
  • xcode: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");
}

我看到三个选项:

  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工作目录的新目录。这显然可以找到,与main.cpp旁边手动创建的data目录相反。

相关文章: