std :: filesystem current_path返回根1

问题描述

我只想通过std::filesystem::path::current_path(编译器为emcc this one)打印当前路径及其内容。下面的一些代码

//... some stuff ...
namespace fs = 
#if defined(_MSC_VER) || defined(_WIN32) 
  std::filesystem;
#else
  std::__fs::filesystem;
#endif
//... some stuff ...
cfg::Config::Config() { this->Path = fs::current_path(); }

void cfg::Config::getPath()
{
    for (auto &p : fs::directory_iterator(this->Path)) std::cout << p.path() << '\n';
}

对于Windows来说,它工作正常,输出如下:

...
"D:\\GitHub\\Emscripten_OpenGL\\build\\cmake_install.cmake"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Debug"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Emscripten_Graphics.dir"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Emscripten_Graphics.sln"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Emscripten_Graphics.vcxproj"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Emscripten_Graphics.vcxproj.filters"
"D:\\GitHub\\Emscripten_OpenGL\\build\\Emscripten_Graphics.vcxproj.user"
...

但是,无论是对于Linux子系统还是带有Ubuntu映像的docker容器,它仅会打印根目录:

application_1  | [100%] Built target Emscripten_Graphics
application_1  | make: make
application_1  | "/tmp"
application_1  | "/home"
application_1  | "/dev"
application_1  | "/proc"

我是否可能因为Linux的std::filesystem而错过了某些东西?

解决方法

我找到了一个解决方案,所以它可能对其他人有用。感谢@Sugar,我在Emscripten Filesystem API挖了。 Emscripten创建自己的虚拟文件系统,并在那里上传c ++代码中使用的文件。根据{{​​3}}的解决方法是在编译时将-s NODERAWFS=1添加为标志。