0

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

//... 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吗?

4

1 回答 1

0

我找到了一个解决方案,所以它可能对其他人有用。感谢@Sugar,我在Emscripten Filesystem API中挖掘。emscripten 创建自己的虚拟文件系统并上传 C++ 代码中使用的文件。根据这个问题,修复它的方法是-s NODERAWFS=1在编译时添加 as 标志。

于 2020-10-07T16:06:38.210 回答