boost :: filesystem :: path和fopen()

Mar*_*tin 11 c++ windows fopen std boost-filesystem

我尝试这样做时出错:

path p = "somepath";
FILE* file = fopen(p.c_str(), "r");
Run Code Online (Sandbox Code Playgroud)

我明白了:

"const boost :: filesystem :: path :: value_type*"类型的参数与"const char*"类型的参数不兼容

谁能告诉我我做错了什么?谢谢

Die*_*lla 13

如果你在Windows下,那value_type就是wchar_t,并且转换失败fopen(需要a char*).根据文档,您似乎必须使用该string()方法来获取具有默认代码转换器(wchar_t- > char)的标准字符串:

FILE* file = fopen(p.string().c_str(), "r");
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,在某些情况下,C++标准库(例如,`fopen()`)不能用于在Windows上打开文件,因为Windows期望传递给`fopen`的文件的编码无法表示该文件的名称.目前还不清楚Windows何时或是否会修复此错误.与此同时,Windows提供了一个非标准函数_wfopen作为解决方法.所以`_wfopen(p.c_str(),L"r")`应该有效. (5认同)