我只想通过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
吗?
我找到了一个解决方案,所以它可能对其他人有用。感谢@Sugar,我挖掘了Emscripten文件系统API。emscripten创建自己的虚拟文件系统,并上传c++代码中使用的文件。根据这个问题,修复它的方法是在编译时添加-s NODERAWFS=1
作为标志。