std::filesystem current_path returns根一

The std::filesystem current_path returns the root one

我只想打印当前路径及其内容,通过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 I dug in the Emscripten Filesystem API. The emscripten creates its own virtual filesystem and uploading there files used in c++ code. According to this issue 修复它的方法是在编译时添加 -s NODERAWFS=1 作为标志。